saa9730.c 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180
  1. /*
  2. * Carsten Langgaard, carstenl@mips.com
  3. * Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
  4. *
  5. * ########################################################################
  6. *
  7. * This program is free software; you can distribute it and/or modify it
  8. * under the terms of the GNU General Public License (Version 2) as
  9. * published by the Free Software Foundation.
  10. *
  11. * This program is distributed in the hope it will be useful, but WITHOUT
  12. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  14. * for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License along
  17. * with this program; if not, write to the Free Software Foundation, Inc.,
  18. * 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
  19. *
  20. * ########################################################################
  21. *
  22. * SAA9730 ethernet driver.
  23. *
  24. * Changes:
  25. * Angelo Dell'Aera <buffer@antifork.org> : Conversion to the new PCI API (pci_driver).
  26. * Conversion to spinlocks.
  27. * Error handling fixes.
  28. *
  29. */
  30. #include <linux/init.h>
  31. #include <linux/netdevice.h>
  32. #include <linux/delay.h>
  33. #include <linux/etherdevice.h>
  34. #include <linux/module.h>
  35. #include <linux/skbuff.h>
  36. #include <linux/pci.h>
  37. #include <linux/spinlock.h>
  38. #include <asm/addrspace.h>
  39. #include <asm/mips-boards/prom.h>
  40. #include "saa9730.h"
  41. #ifdef LAN_SAA9730_DEBUG
  42. int lan_saa9730_debug = LAN_SAA9730_DEBUG;
  43. #else
  44. int lan_saa9730_debug;
  45. #endif
  46. #define DRV_MODULE_NAME "saa9730"
  47. static struct pci_device_id saa9730_pci_tbl[] = {
  48. { PCI_VENDOR_ID_PHILIPS, PCI_DEVICE_ID_PHILIPS_SAA9370,
  49. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0UL },
  50. { 0, }
  51. };
  52. MODULE_DEVICE_TABLE(pci, saa9730_pci_tbl);
  53. /* Non-zero only if the current card is a PCI with BIOS-set IRQ. */
  54. static unsigned int pci_irq_line;
  55. #define INL(a) inl((unsigned long)a)
  56. #define OUTL(x,a) outl(x,(unsigned long)a)
  57. static void evm_saa9730_enable_lan_int(struct lan_saa9730_private *lp)
  58. {
  59. OUTL(INL(&lp->evm_saa9730_regs->InterruptBlock1) | EVM_LAN_INT,
  60. &lp->evm_saa9730_regs->InterruptBlock1);
  61. OUTL(INL(&lp->evm_saa9730_regs->InterruptStatus1) | EVM_LAN_INT,
  62. &lp->evm_saa9730_regs->InterruptStatus1);
  63. OUTL(INL(&lp->evm_saa9730_regs->InterruptEnable1) | EVM_LAN_INT |
  64. EVM_MASTER_EN, &lp->evm_saa9730_regs->InterruptEnable1);
  65. }
  66. static void evm_saa9730_disable_lan_int(struct lan_saa9730_private *lp)
  67. {
  68. OUTL(INL(&lp->evm_saa9730_regs->InterruptBlock1) & ~EVM_LAN_INT,
  69. &lp->evm_saa9730_regs->InterruptBlock1);
  70. OUTL(INL(&lp->evm_saa9730_regs->InterruptEnable1) & ~EVM_LAN_INT,
  71. &lp->evm_saa9730_regs->InterruptEnable1);
  72. }
  73. static void evm_saa9730_clear_lan_int(struct lan_saa9730_private *lp)
  74. {
  75. OUTL(EVM_LAN_INT, &lp->evm_saa9730_regs->InterruptStatus1);
  76. }
  77. static void evm_saa9730_block_lan_int(struct lan_saa9730_private *lp)
  78. {
  79. OUTL(INL(&lp->evm_saa9730_regs->InterruptBlock1) & ~EVM_LAN_INT,
  80. &lp->evm_saa9730_regs->InterruptBlock1);
  81. }
  82. static void evm_saa9730_unblock_lan_int(struct lan_saa9730_private *lp)
  83. {
  84. OUTL(INL(&lp->evm_saa9730_regs->InterruptBlock1) | EVM_LAN_INT,
  85. &lp->evm_saa9730_regs->InterruptBlock1);
  86. }
  87. static void show_saa9730_regs(struct lan_saa9730_private *lp)
  88. {
  89. int i, j;
  90. printk("TxmBufferA = %x\n", lp->TxmBuffer[0][0]);
  91. printk("TxmBufferB = %x\n", lp->TxmBuffer[1][0]);
  92. printk("RcvBufferA = %x\n", lp->RcvBuffer[0][0]);
  93. printk("RcvBufferB = %x\n", lp->RcvBuffer[1][0]);
  94. for (i = 0; i < LAN_SAA9730_BUFFERS; i++) {
  95. for (j = 0; j < LAN_SAA9730_TXM_Q_SIZE; j++) {
  96. printk("TxmBuffer[%d][%d] = %x\n", i, j,
  97. le32_to_cpu(*(unsigned int *)
  98. lp->TxmBuffer[i][j]));
  99. }
  100. }
  101. for (i = 0; i < LAN_SAA9730_BUFFERS; i++) {
  102. for (j = 0; j < LAN_SAA9730_RCV_Q_SIZE; j++) {
  103. printk("RcvBuffer[%d][%d] = %x\n", i, j,
  104. le32_to_cpu(*(unsigned int *)
  105. lp->RcvBuffer[i][j]));
  106. }
  107. }
  108. printk("lp->evm_saa9730_regs->InterruptBlock1 = %x\n",
  109. INL(&lp->evm_saa9730_regs->InterruptBlock1));
  110. printk("lp->evm_saa9730_regs->InterruptStatus1 = %x\n",
  111. INL(&lp->evm_saa9730_regs->InterruptStatus1));
  112. printk("lp->evm_saa9730_regs->InterruptEnable1 = %x\n",
  113. INL(&lp->evm_saa9730_regs->InterruptEnable1));
  114. printk("lp->lan_saa9730_regs->Ok2Use = %x\n",
  115. INL(&lp->lan_saa9730_regs->Ok2Use));
  116. printk("lp->NextTxmBufferIndex = %x\n", lp->NextTxmBufferIndex);
  117. printk("lp->NextTxmPacketIndex = %x\n", lp->NextTxmPacketIndex);
  118. printk("lp->PendingTxmBufferIndex = %x\n",
  119. lp->PendingTxmBufferIndex);
  120. printk("lp->PendingTxmPacketIndex = %x\n",
  121. lp->PendingTxmPacketIndex);
  122. printk("lp->lan_saa9730_regs->LanDmaCtl = %x\n",
  123. INL(&lp->lan_saa9730_regs->LanDmaCtl));
  124. printk("lp->lan_saa9730_regs->DmaStatus = %x\n",
  125. INL(&lp->lan_saa9730_regs->DmaStatus));
  126. printk("lp->lan_saa9730_regs->CamCtl = %x\n",
  127. INL(&lp->lan_saa9730_regs->CamCtl));
  128. printk("lp->lan_saa9730_regs->TxCtl = %x\n",
  129. INL(&lp->lan_saa9730_regs->TxCtl));
  130. printk("lp->lan_saa9730_regs->TxStatus = %x\n",
  131. INL(&lp->lan_saa9730_regs->TxStatus));
  132. printk("lp->lan_saa9730_regs->RxCtl = %x\n",
  133. INL(&lp->lan_saa9730_regs->RxCtl));
  134. printk("lp->lan_saa9730_regs->RxStatus = %x\n",
  135. INL(&lp->lan_saa9730_regs->RxStatus));
  136. for (i = 0; i < LAN_SAA9730_CAM_DWORDS; i++) {
  137. OUTL(i, &lp->lan_saa9730_regs->CamAddress);
  138. printk("lp->lan_saa9730_regs->CamData = %x\n",
  139. INL(&lp->lan_saa9730_regs->CamData));
  140. }
  141. printk("lp->stats.tx_packets = %lx\n", lp->stats.tx_packets);
  142. printk("lp->stats.tx_errors = %lx\n", lp->stats.tx_errors);
  143. printk("lp->stats.tx_aborted_errors = %lx\n",
  144. lp->stats.tx_aborted_errors);
  145. printk("lp->stats.tx_window_errors = %lx\n",
  146. lp->stats.tx_window_errors);
  147. printk("lp->stats.tx_carrier_errors = %lx\n",
  148. lp->stats.tx_carrier_errors);
  149. printk("lp->stats.tx_fifo_errors = %lx\n",
  150. lp->stats.tx_fifo_errors);
  151. printk("lp->stats.tx_heartbeat_errors = %lx\n",
  152. lp->stats.tx_heartbeat_errors);
  153. printk("lp->stats.collisions = %lx\n", lp->stats.collisions);
  154. printk("lp->stats.rx_packets = %lx\n", lp->stats.rx_packets);
  155. printk("lp->stats.rx_errors = %lx\n", lp->stats.rx_errors);
  156. printk("lp->stats.rx_dropped = %lx\n", lp->stats.rx_dropped);
  157. printk("lp->stats.rx_crc_errors = %lx\n", lp->stats.rx_crc_errors);
  158. printk("lp->stats.rx_frame_errors = %lx\n",
  159. lp->stats.rx_frame_errors);
  160. printk("lp->stats.rx_fifo_errors = %lx\n",
  161. lp->stats.rx_fifo_errors);
  162. printk("lp->stats.rx_length_errors = %lx\n",
  163. lp->stats.rx_length_errors);
  164. printk("lp->lan_saa9730_regs->DebugPCIMasterAddr = %x\n",
  165. INL(&lp->lan_saa9730_regs->DebugPCIMasterAddr));
  166. printk("lp->lan_saa9730_regs->DebugLanTxStateMachine = %x\n",
  167. INL(&lp->lan_saa9730_regs->DebugLanTxStateMachine));
  168. printk("lp->lan_saa9730_regs->DebugLanRxStateMachine = %x\n",
  169. INL(&lp->lan_saa9730_regs->DebugLanRxStateMachine));
  170. printk("lp->lan_saa9730_regs->DebugLanTxFifoPointers = %x\n",
  171. INL(&lp->lan_saa9730_regs->DebugLanTxFifoPointers));
  172. printk("lp->lan_saa9730_regs->DebugLanRxFifoPointers = %x\n",
  173. INL(&lp->lan_saa9730_regs->DebugLanRxFifoPointers));
  174. printk("lp->lan_saa9730_regs->DebugLanCtlStateMachine = %x\n",
  175. INL(&lp->lan_saa9730_regs->DebugLanCtlStateMachine));
  176. }
  177. static void lan_saa9730_buffer_init(struct lan_saa9730_private *lp)
  178. {
  179. int i, j;
  180. /* Init RX buffers */
  181. for (i = 0; i < LAN_SAA9730_BUFFERS; i++) {
  182. for (j = 0; j < LAN_SAA9730_RCV_Q_SIZE; j++) {
  183. *(unsigned int *) lp->RcvBuffer[i][j] =
  184. cpu_to_le32(RXSF_READY <<
  185. RX_STAT_CTL_OWNER_SHF);
  186. }
  187. }
  188. /* Init TX buffers */
  189. for (i = 0; i < LAN_SAA9730_BUFFERS; i++) {
  190. for (j = 0; j < LAN_SAA9730_TXM_Q_SIZE; j++) {
  191. *(unsigned int *) lp->TxmBuffer[i][j] =
  192. cpu_to_le32(TXSF_EMPTY <<
  193. TX_STAT_CTL_OWNER_SHF);
  194. }
  195. }
  196. }
  197. static int lan_saa9730_allocate_buffers(struct lan_saa9730_private *lp)
  198. {
  199. unsigned int mem_size;
  200. void *Pa;
  201. unsigned int i, j, RcvBufferSize, TxmBufferSize;
  202. unsigned int buffer_start;
  203. /*
  204. * Allocate all RX and TX packets in one chunk.
  205. * The Rx and Tx packets must be PACKET_SIZE aligned.
  206. */
  207. mem_size = ((LAN_SAA9730_RCV_Q_SIZE + LAN_SAA9730_TXM_Q_SIZE) *
  208. LAN_SAA9730_PACKET_SIZE * LAN_SAA9730_BUFFERS) +
  209. LAN_SAA9730_PACKET_SIZE;
  210. buffer_start =
  211. (unsigned int) kmalloc(mem_size, GFP_DMA | GFP_KERNEL);
  212. if (!buffer_start)
  213. return -ENOMEM;
  214. /*
  215. * Set DMA buffer to kseg1 (uncached).
  216. * Make sure to flush before using it uncached.
  217. */
  218. Pa = (void *) KSEG1ADDR((buffer_start + LAN_SAA9730_PACKET_SIZE) &
  219. ~(LAN_SAA9730_PACKET_SIZE - 1));
  220. dma_cache_wback_inv((unsigned long) Pa, mem_size);
  221. /* Initialize buffer space */
  222. RcvBufferSize = LAN_SAA9730_PACKET_SIZE;
  223. TxmBufferSize = LAN_SAA9730_PACKET_SIZE;
  224. lp->DmaRcvPackets = LAN_SAA9730_RCV_Q_SIZE;
  225. lp->DmaTxmPackets = LAN_SAA9730_TXM_Q_SIZE;
  226. /* Init RX buffers */
  227. for (i = 0; i < LAN_SAA9730_BUFFERS; i++) {
  228. for (j = 0; j < LAN_SAA9730_RCV_Q_SIZE; j++) {
  229. *(unsigned int *) Pa =
  230. cpu_to_le32(RXSF_READY <<
  231. RX_STAT_CTL_OWNER_SHF);
  232. lp->RcvBuffer[i][j] = (unsigned int) Pa;
  233. Pa += RcvBufferSize;
  234. }
  235. }
  236. /* Init TX buffers */
  237. for (i = 0; i < LAN_SAA9730_BUFFERS; i++) {
  238. for (j = 0; j < LAN_SAA9730_TXM_Q_SIZE; j++) {
  239. *(unsigned int *) Pa =
  240. cpu_to_le32(TXSF_EMPTY <<
  241. TX_STAT_CTL_OWNER_SHF);
  242. lp->TxmBuffer[i][j] = (unsigned int) Pa;
  243. Pa += TxmBufferSize;
  244. }
  245. }
  246. /*
  247. * Set rx buffer A and rx buffer B to point to the first two buffer
  248. * spaces.
  249. */
  250. OUTL(PHYSADDR(lp->RcvBuffer[0][0]),
  251. &lp->lan_saa9730_regs->RxBuffA);
  252. OUTL(PHYSADDR(lp->RcvBuffer[1][0]),
  253. &lp->lan_saa9730_regs->RxBuffB);
  254. /* Initialize Buffer Index */
  255. lp->NextRcvPacketIndex = 0;
  256. lp->NextRcvToUseIsA = 1;
  257. /* Set current buffer index & next availble packet index */
  258. lp->NextTxmPacketIndex = 0;
  259. lp->NextTxmBufferIndex = 0;
  260. lp->PendingTxmPacketIndex = 0;
  261. lp->PendingTxmBufferIndex = 0;
  262. /*
  263. * Set txm_buf_a and txm_buf_b to point to the first two buffer
  264. * space
  265. */
  266. OUTL(PHYSADDR(lp->TxmBuffer[0][0]),
  267. &lp->lan_saa9730_regs->TxBuffA);
  268. OUTL(PHYSADDR(lp->TxmBuffer[1][0]),
  269. &lp->lan_saa9730_regs->TxBuffB);
  270. /* Set packet number */
  271. OUTL((lp->DmaRcvPackets << PK_COUNT_RX_A_SHF) |
  272. (lp->DmaRcvPackets << PK_COUNT_RX_B_SHF) |
  273. (lp->DmaTxmPackets << PK_COUNT_TX_A_SHF) |
  274. (lp->DmaTxmPackets << PK_COUNT_TX_B_SHF),
  275. &lp->lan_saa9730_regs->PacketCount);
  276. return 0;
  277. }
  278. static int lan_saa9730_cam_load(struct lan_saa9730_private *lp)
  279. {
  280. unsigned int i;
  281. unsigned char *NetworkAddress;
  282. NetworkAddress = (unsigned char *) &lp->PhysicalAddress[0][0];
  283. for (i = 0; i < LAN_SAA9730_CAM_DWORDS; i++) {
  284. /* First set address to where data is written */
  285. OUTL(i, &lp->lan_saa9730_regs->CamAddress);
  286. OUTL((NetworkAddress[0] << 24) | (NetworkAddress[1] << 16)
  287. | (NetworkAddress[2] << 8) | NetworkAddress[3],
  288. &lp->lan_saa9730_regs->CamData);
  289. NetworkAddress += 4;
  290. }
  291. return 0;
  292. }
  293. static int lan_saa9730_cam_init(struct net_device *dev)
  294. {
  295. struct lan_saa9730_private *lp =
  296. (struct lan_saa9730_private *) dev->priv;
  297. unsigned int i;
  298. /* Copy MAC-address into all entries. */
  299. for (i = 0; i < LAN_SAA9730_CAM_ENTRIES; i++) {
  300. memcpy((unsigned char *) lp->PhysicalAddress[i],
  301. (unsigned char *) dev->dev_addr, 6);
  302. }
  303. return 0;
  304. }
  305. static int lan_saa9730_mii_init(struct lan_saa9730_private *lp)
  306. {
  307. int i, l;
  308. /* Check link status, spin here till station is not busy. */
  309. i = 0;
  310. while (INL(&lp->lan_saa9730_regs->StationMgmtCtl) & MD_CA_BUSY) {
  311. i++;
  312. if (i > 100) {
  313. printk("Error: lan_saa9730_mii_init: timeout\n");
  314. return -1;
  315. }
  316. mdelay(1); /* wait 1 ms. */
  317. }
  318. /* Now set the control and address register. */
  319. OUTL(MD_CA_BUSY | PHY_STATUS | PHY_ADDRESS << MD_CA_PHY_SHF,
  320. &lp->lan_saa9730_regs->StationMgmtCtl);
  321. /* check link status, spin here till station is not busy */
  322. i = 0;
  323. while (INL(&lp->lan_saa9730_regs->StationMgmtCtl) & MD_CA_BUSY) {
  324. i++;
  325. if (i > 100) {
  326. printk("Error: lan_saa9730_mii_init: timeout\n");
  327. return -1;
  328. }
  329. mdelay(1); /* wait 1 ms. */
  330. }
  331. /* Wait for 1 ms. */
  332. mdelay(1);
  333. /* Check the link status. */
  334. if (INL(&lp->lan_saa9730_regs->StationMgmtData) &
  335. PHY_STATUS_LINK_UP) {
  336. /* Link is up. */
  337. return 0;
  338. } else {
  339. /* Link is down, reset the PHY first. */
  340. /* set PHY address = 'CONTROL' */
  341. OUTL(PHY_ADDRESS << MD_CA_PHY_SHF | MD_CA_WR | PHY_CONTROL,
  342. &lp->lan_saa9730_regs->StationMgmtCtl);
  343. /* Wait for 1 ms. */
  344. mdelay(1);
  345. /* set 'CONTROL' = force reset and renegotiate */
  346. OUTL(PHY_CONTROL_RESET | PHY_CONTROL_AUTO_NEG |
  347. PHY_CONTROL_RESTART_AUTO_NEG,
  348. &lp->lan_saa9730_regs->StationMgmtData);
  349. /* Wait for 50 ms. */
  350. mdelay(50);
  351. /* set 'BUSY' to start operation */
  352. OUTL(MD_CA_BUSY | PHY_ADDRESS << MD_CA_PHY_SHF | MD_CA_WR |
  353. PHY_CONTROL, &lp->lan_saa9730_regs->StationMgmtCtl);
  354. /* await completion */
  355. i = 0;
  356. while (INL(&lp->lan_saa9730_regs->StationMgmtCtl) &
  357. MD_CA_BUSY) {
  358. i++;
  359. if (i > 100) {
  360. printk
  361. ("Error: lan_saa9730_mii_init: timeout\n");
  362. return -1;
  363. }
  364. mdelay(1); /* wait 1 ms. */
  365. }
  366. /* Wait for 1 ms. */
  367. mdelay(1);
  368. for (l = 0; l < 2; l++) {
  369. /* set PHY address = 'STATUS' */
  370. OUTL(MD_CA_BUSY | PHY_ADDRESS << MD_CA_PHY_SHF |
  371. PHY_STATUS,
  372. &lp->lan_saa9730_regs->StationMgmtCtl);
  373. /* await completion */
  374. i = 0;
  375. while (INL(&lp->lan_saa9730_regs->StationMgmtCtl) &
  376. MD_CA_BUSY) {
  377. i++;
  378. if (i > 100) {
  379. printk
  380. ("Error: lan_saa9730_mii_init: timeout\n");
  381. return -1;
  382. }
  383. mdelay(1); /* wait 1 ms. */
  384. }
  385. /* wait for 3 sec. */
  386. mdelay(3000);
  387. /* check the link status */
  388. if (INL(&lp->lan_saa9730_regs->StationMgmtData) &
  389. PHY_STATUS_LINK_UP) {
  390. /* link is up */
  391. break;
  392. }
  393. }
  394. }
  395. return 0;
  396. }
  397. static int lan_saa9730_control_init(struct lan_saa9730_private *lp)
  398. {
  399. /* Initialize DMA control register. */
  400. OUTL((LANMB_ANY << DMA_CTL_MAX_XFER_SHF) |
  401. (LANEND_LITTLE << DMA_CTL_ENDIAN_SHF) |
  402. (LAN_SAA9730_RCV_Q_INT_THRESHOLD << DMA_CTL_RX_INT_COUNT_SHF)
  403. | DMA_CTL_RX_INT_TO_EN | DMA_CTL_RX_INT_EN |
  404. DMA_CTL_MAC_RX_INT_EN | DMA_CTL_MAC_TX_INT_EN,
  405. &lp->lan_saa9730_regs->LanDmaCtl);
  406. /* Initial MAC control register. */
  407. OUTL((MACCM_MII << MAC_CONTROL_CONN_SHF) | MAC_CONTROL_FULL_DUP,
  408. &lp->lan_saa9730_regs->MacCtl);
  409. /* Initialize CAM control register. */
  410. OUTL(CAM_CONTROL_COMP_EN | CAM_CONTROL_BROAD_ACC,
  411. &lp->lan_saa9730_regs->CamCtl);
  412. /*
  413. * Initialize CAM enable register, only turn on first entry, should
  414. * contain own addr.
  415. */
  416. OUTL(0x0001, &lp->lan_saa9730_regs->CamEnable);
  417. /* Initialize Tx control register */
  418. OUTL(TX_CTL_EN_COMP, &lp->lan_saa9730_regs->TxCtl);
  419. /* Initialize Rcv control register */
  420. OUTL(RX_CTL_STRIP_CRC, &lp->lan_saa9730_regs->RxCtl);
  421. /* Reset DMA engine */
  422. OUTL(DMA_TEST_SW_RESET, &lp->lan_saa9730_regs->DmaTest);
  423. return 0;
  424. }
  425. static int lan_saa9730_stop(struct lan_saa9730_private *lp)
  426. {
  427. int i;
  428. /* Stop DMA first */
  429. OUTL(INL(&lp->lan_saa9730_regs->LanDmaCtl) &
  430. ~(DMA_CTL_EN_TX_DMA | DMA_CTL_EN_RX_DMA),
  431. &lp->lan_saa9730_regs->LanDmaCtl);
  432. /* Set the SW Reset bits in DMA and MAC control registers */
  433. OUTL(DMA_TEST_SW_RESET, &lp->lan_saa9730_regs->DmaTest);
  434. OUTL(INL(&lp->lan_saa9730_regs->MacCtl) | MAC_CONTROL_RESET,
  435. &lp->lan_saa9730_regs->MacCtl);
  436. /*
  437. * Wait for MAC reset to have finished. The reset bit is auto cleared
  438. * when the reset is done.
  439. */
  440. i = 0;
  441. while (INL(&lp->lan_saa9730_regs->MacCtl) & MAC_CONTROL_RESET) {
  442. i++;
  443. if (i > 100) {
  444. printk
  445. ("Error: lan_sa9730_stop: MAC reset timeout\n");
  446. return -1;
  447. }
  448. mdelay(1); /* wait 1 ms. */
  449. }
  450. return 0;
  451. }
  452. static int lan_saa9730_dma_init(struct lan_saa9730_private *lp)
  453. {
  454. /* Stop lan controller. */
  455. lan_saa9730_stop(lp);
  456. OUTL(LAN_SAA9730_DEFAULT_TIME_OUT_CNT,
  457. &lp->lan_saa9730_regs->Timeout);
  458. return 0;
  459. }
  460. static int lan_saa9730_start(struct lan_saa9730_private *lp)
  461. {
  462. lan_saa9730_buffer_init(lp);
  463. /* Initialize Rx Buffer Index */
  464. lp->NextRcvPacketIndex = 0;
  465. lp->NextRcvToUseIsA = 1;
  466. /* Set current buffer index & next availble packet index */
  467. lp->NextTxmPacketIndex = 0;
  468. lp->NextTxmBufferIndex = 0;
  469. lp->PendingTxmPacketIndex = 0;
  470. lp->PendingTxmBufferIndex = 0;
  471. OUTL(INL(&lp->lan_saa9730_regs->LanDmaCtl) | DMA_CTL_EN_TX_DMA |
  472. DMA_CTL_EN_RX_DMA, &lp->lan_saa9730_regs->LanDmaCtl);
  473. /* For Tx, turn on MAC then DMA */
  474. OUTL(INL(&lp->lan_saa9730_regs->TxCtl) | TX_CTL_TX_EN,
  475. &lp->lan_saa9730_regs->TxCtl);
  476. /* For Rx, turn on DMA then MAC */
  477. OUTL(INL(&lp->lan_saa9730_regs->RxCtl) | RX_CTL_RX_EN,
  478. &lp->lan_saa9730_regs->RxCtl);
  479. /* Set Ok2Use to let hardware owns the buffers */
  480. OUTL(OK2USE_RX_A | OK2USE_RX_B | OK2USE_TX_A | OK2USE_TX_B,
  481. &lp->lan_saa9730_regs->Ok2Use);
  482. return 0;
  483. }
  484. static int lan_saa9730_restart(struct lan_saa9730_private *lp)
  485. {
  486. lan_saa9730_stop(lp);
  487. lan_saa9730_start(lp);
  488. return 0;
  489. }
  490. static int lan_saa9730_tx(struct net_device *dev)
  491. {
  492. struct lan_saa9730_private *lp =
  493. (struct lan_saa9730_private *) dev->priv;
  494. unsigned int *pPacket;
  495. unsigned int tx_status;
  496. if (lan_saa9730_debug > 5)
  497. printk("lan_saa9730_tx interrupt\n");
  498. /* Clear interrupt. */
  499. OUTL(DMA_STATUS_MAC_TX_INT, &lp->lan_saa9730_regs->DmaStatus);
  500. while (1) {
  501. pPacket =
  502. (unsigned int *) lp->TxmBuffer[lp->
  503. PendingTxmBufferIndex]
  504. [lp->PendingTxmPacketIndex];
  505. /* Get status of first packet transmitted. */
  506. tx_status = le32_to_cpu(*pPacket);
  507. /* Check ownership. */
  508. if ((tx_status & TX_STAT_CTL_OWNER_MSK) !=
  509. (TXSF_HWDONE << TX_STAT_CTL_OWNER_SHF)) break;
  510. /* Check for error. */
  511. if (tx_status & TX_STAT_CTL_ERROR_MSK) {
  512. if (lan_saa9730_debug > 1)
  513. printk("lan_saa9730_tx: tx error = %x\n",
  514. tx_status);
  515. lp->stats.tx_errors++;
  516. if (tx_status &
  517. (TX_STATUS_EX_COLL << TX_STAT_CTL_STATUS_SHF))
  518. lp->stats.tx_aborted_errors++;
  519. if (tx_status &
  520. (TX_STATUS_LATE_COLL <<
  521. TX_STAT_CTL_STATUS_SHF)) lp->stats.
  522. tx_window_errors++;
  523. if (tx_status &
  524. (TX_STATUS_L_CARR << TX_STAT_CTL_STATUS_SHF))
  525. lp->stats.tx_carrier_errors++;
  526. if (tx_status &
  527. (TX_STATUS_UNDER << TX_STAT_CTL_STATUS_SHF))
  528. lp->stats.tx_fifo_errors++;
  529. if (tx_status &
  530. (TX_STATUS_SQ_ERR << TX_STAT_CTL_STATUS_SHF))
  531. lp->stats.tx_heartbeat_errors++;
  532. lp->stats.collisions +=
  533. tx_status & TX_STATUS_TX_COLL_MSK;
  534. }
  535. /* Free buffer. */
  536. *pPacket =
  537. cpu_to_le32(TXSF_EMPTY << TX_STAT_CTL_OWNER_SHF);
  538. /* Update pending index pointer. */
  539. lp->PendingTxmPacketIndex++;
  540. if (lp->PendingTxmPacketIndex >= LAN_SAA9730_TXM_Q_SIZE) {
  541. lp->PendingTxmPacketIndex = 0;
  542. lp->PendingTxmBufferIndex ^= 1;
  543. }
  544. }
  545. /* Make sure A and B are available to hardware. */
  546. OUTL(OK2USE_TX_A | OK2USE_TX_B, &lp->lan_saa9730_regs->Ok2Use);
  547. if (netif_queue_stopped(dev)) {
  548. /* The tx buffer is no longer full. */
  549. netif_wake_queue(dev);
  550. }
  551. return 0;
  552. }
  553. static int lan_saa9730_rx(struct net_device *dev)
  554. {
  555. struct lan_saa9730_private *lp =
  556. (struct lan_saa9730_private *) dev->priv;
  557. int len = 0;
  558. struct sk_buff *skb = 0;
  559. unsigned int rx_status;
  560. int BufferIndex;
  561. int PacketIndex;
  562. unsigned int *pPacket;
  563. unsigned char *pData;
  564. if (lan_saa9730_debug > 5)
  565. printk("lan_saa9730_rx interrupt\n");
  566. /* Clear receive interrupts. */
  567. OUTL(DMA_STATUS_MAC_RX_INT | DMA_STATUS_RX_INT |
  568. DMA_STATUS_RX_TO_INT, &lp->lan_saa9730_regs->DmaStatus);
  569. /* Address next packet */
  570. if (lp->NextRcvToUseIsA)
  571. BufferIndex = 0;
  572. else
  573. BufferIndex = 1;
  574. PacketIndex = lp->NextRcvPacketIndex;
  575. pPacket = (unsigned int *) lp->RcvBuffer[BufferIndex][PacketIndex];
  576. rx_status = le32_to_cpu(*pPacket);
  577. /* Process each packet. */
  578. while ((rx_status & RX_STAT_CTL_OWNER_MSK) ==
  579. (RXSF_HWDONE << RX_STAT_CTL_OWNER_SHF)) {
  580. /* Check the rx status. */
  581. if (rx_status & (RX_STATUS_GOOD << RX_STAT_CTL_STATUS_SHF)) {
  582. /* Received packet is good. */
  583. len = (rx_status & RX_STAT_CTL_LENGTH_MSK) >>
  584. RX_STAT_CTL_LENGTH_SHF;
  585. pData = (unsigned char *) pPacket;
  586. pData += 4;
  587. skb = dev_alloc_skb(len + 2);
  588. if (skb == 0) {
  589. printk
  590. ("%s: Memory squeeze, deferring packet.\n",
  591. dev->name);
  592. lp->stats.rx_dropped++;
  593. } else {
  594. lp->stats.rx_bytes += len;
  595. lp->stats.rx_packets++;
  596. skb->dev = dev;
  597. skb_reserve(skb, 2); /* 16 byte align */
  598. skb_put(skb, len); /* make room */
  599. eth_copy_and_sum(skb,
  600. (unsigned char *) pData,
  601. len, 0);
  602. skb->protocol = eth_type_trans(skb, dev);
  603. netif_rx(skb);
  604. dev->last_rx = jiffies;
  605. }
  606. } else {
  607. /* We got an error packet. */
  608. if (lan_saa9730_debug > 2)
  609. printk
  610. ("lan_saa9730_rx: We got an error packet = %x\n",
  611. rx_status);
  612. lp->stats.rx_errors++;
  613. if (rx_status &
  614. (RX_STATUS_CRC_ERR << RX_STAT_CTL_STATUS_SHF))
  615. lp->stats.rx_crc_errors++;
  616. if (rx_status &
  617. (RX_STATUS_ALIGN_ERR <<
  618. RX_STAT_CTL_STATUS_SHF)) lp->stats.
  619. rx_frame_errors++;
  620. if (rx_status &
  621. (RX_STATUS_OVERFLOW << RX_STAT_CTL_STATUS_SHF))
  622. lp->stats.rx_fifo_errors++;
  623. if (rx_status &
  624. (RX_STATUS_LONG_ERR << RX_STAT_CTL_STATUS_SHF))
  625. lp->stats.rx_length_errors++;
  626. }
  627. /* Indicate we have processed the buffer. */
  628. *pPacket =
  629. cpu_to_le32(RXSF_READY << RX_STAT_CTL_OWNER_SHF);
  630. /* Go to next packet in sequence. */
  631. lp->NextRcvPacketIndex++;
  632. if (lp->NextRcvPacketIndex >= LAN_SAA9730_RCV_Q_SIZE) {
  633. lp->NextRcvPacketIndex = 0;
  634. if (BufferIndex) {
  635. lp->NextRcvToUseIsA = 1;
  636. } else {
  637. lp->NextRcvToUseIsA = 0;
  638. }
  639. }
  640. OUTL(OK2USE_RX_A | OK2USE_RX_B,
  641. &lp->lan_saa9730_regs->Ok2Use);
  642. /* Address next packet */
  643. if (lp->NextRcvToUseIsA)
  644. BufferIndex = 0;
  645. else
  646. BufferIndex = 1;
  647. PacketIndex = lp->NextRcvPacketIndex;
  648. pPacket =
  649. (unsigned int *) lp->
  650. RcvBuffer[BufferIndex][PacketIndex];
  651. rx_status = le32_to_cpu(*pPacket);
  652. }
  653. /* Make sure A and B are available to hardware. */
  654. OUTL(OK2USE_RX_A | OK2USE_RX_B, &lp->lan_saa9730_regs->Ok2Use);
  655. return 0;
  656. }
  657. static irqreturn_t lan_saa9730_interrupt(const int irq, void *dev_id,
  658. struct pt_regs *regs)
  659. {
  660. struct net_device *dev = (struct net_device *) dev_id;
  661. struct lan_saa9730_private *lp =
  662. (struct lan_saa9730_private *) dev->priv;
  663. if (lan_saa9730_debug > 5)
  664. printk("lan_saa9730_interrupt\n");
  665. /* Disable the EVM LAN interrupt. */
  666. evm_saa9730_block_lan_int(lp);
  667. /* Clear the EVM LAN interrupt. */
  668. evm_saa9730_clear_lan_int(lp);
  669. /* Service pending transmit interrupts. */
  670. if (INL(&lp->lan_saa9730_regs->DmaStatus) & DMA_STATUS_MAC_TX_INT)
  671. lan_saa9730_tx(dev);
  672. /* Service pending receive interrupts. */
  673. if (INL(&lp->lan_saa9730_regs->DmaStatus) &
  674. (DMA_STATUS_MAC_RX_INT | DMA_STATUS_RX_INT |
  675. DMA_STATUS_RX_TO_INT)) lan_saa9730_rx(dev);
  676. /* Enable the EVM LAN interrupt. */
  677. evm_saa9730_unblock_lan_int(lp);
  678. return IRQ_HANDLED;
  679. }
  680. static int lan_saa9730_open_fail(struct net_device *dev)
  681. {
  682. return -ENODEV;
  683. }
  684. static int lan_saa9730_open(struct net_device *dev)
  685. {
  686. struct lan_saa9730_private *lp =
  687. (struct lan_saa9730_private *) dev->priv;
  688. /* Associate IRQ with lan_saa9730_interrupt */
  689. if (request_irq(dev->irq, &lan_saa9730_interrupt, 0, "SAA9730 Eth",
  690. dev)) {
  691. printk("lan_saa9730_open: Can't get irq %d\n", dev->irq);
  692. return -EAGAIN;
  693. }
  694. /* Enable the Lan interrupt in the event manager. */
  695. evm_saa9730_enable_lan_int(lp);
  696. /* Start the LAN controller */
  697. if (lan_saa9730_start(lp))
  698. return -1;
  699. netif_start_queue(dev);
  700. return 0;
  701. }
  702. static int lan_saa9730_write(struct lan_saa9730_private *lp,
  703. struct sk_buff *skb, int skblen)
  704. {
  705. unsigned char *pbData = skb->data;
  706. unsigned int len = skblen;
  707. unsigned char *pbPacketData;
  708. unsigned int tx_status;
  709. int BufferIndex;
  710. int PacketIndex;
  711. if (lan_saa9730_debug > 5)
  712. printk("lan_saa9730_write: skb=%08x\n",
  713. (unsigned int) skb);
  714. BufferIndex = lp->NextTxmBufferIndex;
  715. PacketIndex = lp->NextTxmPacketIndex;
  716. tx_status =
  717. le32_to_cpu(*(unsigned int *) lp->
  718. TxmBuffer[BufferIndex][PacketIndex]);
  719. if ((tx_status & TX_STAT_CTL_OWNER_MSK) !=
  720. (TXSF_EMPTY << TX_STAT_CTL_OWNER_SHF)) {
  721. if (lan_saa9730_debug > 4)
  722. printk
  723. ("lan_saa9730_write: Tx buffer not available: tx_status = %x\n",
  724. tx_status);
  725. return -1;
  726. }
  727. lp->NextTxmPacketIndex++;
  728. if (lp->NextTxmPacketIndex >= LAN_SAA9730_TXM_Q_SIZE) {
  729. lp->NextTxmPacketIndex = 0;
  730. lp->NextTxmBufferIndex ^= 1;
  731. }
  732. pbPacketData =
  733. (unsigned char *) lp->TxmBuffer[BufferIndex][PacketIndex];
  734. pbPacketData += 4;
  735. /* copy the bits */
  736. memcpy(pbPacketData, pbData, len);
  737. /* Set transmit status for hardware */
  738. *(unsigned int *) lp->TxmBuffer[BufferIndex][PacketIndex] =
  739. cpu_to_le32((TXSF_READY << TX_STAT_CTL_OWNER_SHF) |
  740. (TX_STAT_CTL_INT_AFTER_TX << TX_STAT_CTL_FRAME_SHF)
  741. | (len << TX_STAT_CTL_LENGTH_SHF));
  742. /* Set hardware tx buffer. */
  743. OUTL(OK2USE_TX_A | OK2USE_TX_B, &lp->lan_saa9730_regs->Ok2Use);
  744. return 0;
  745. }
  746. static void lan_saa9730_tx_timeout(struct net_device *dev)
  747. {
  748. struct lan_saa9730_private *lp =
  749. (struct lan_saa9730_private *) dev->priv;
  750. /* Transmitter timeout, serious problems */
  751. lp->stats.tx_errors++;
  752. printk("%s: transmit timed out, reset\n", dev->name);
  753. /*show_saa9730_regs(lp); */
  754. lan_saa9730_restart(lp);
  755. dev->trans_start = jiffies;
  756. netif_start_queue(dev);
  757. }
  758. static int lan_saa9730_start_xmit(struct sk_buff *skb,
  759. struct net_device *dev)
  760. {
  761. struct lan_saa9730_private *lp =
  762. (struct lan_saa9730_private *) dev->priv;
  763. unsigned long flags;
  764. int skblen;
  765. int len;
  766. if (lan_saa9730_debug > 4)
  767. printk("Send packet: skb=%08x\n", (unsigned int) skb);
  768. skblen = skb->len;
  769. spin_lock_irqsave(&lp->lock, flags);
  770. len = (skblen <= ETH_ZLEN) ? ETH_ZLEN : skblen;
  771. if (lan_saa9730_write(lp, skb, skblen)) {
  772. spin_unlock_irqrestore(&lp->lock, flags);
  773. printk("Error when writing packet to controller: skb=%08x\n",
  774. (unsigned int) skb);
  775. netif_stop_queue(dev);
  776. return -1;
  777. }
  778. lp->stats.tx_bytes += len;
  779. lp->stats.tx_packets++;
  780. dev->trans_start = jiffies;
  781. netif_start_queue(dev);
  782. dev_kfree_skb(skb);
  783. spin_unlock_irqrestore(&lp->lock, flags);
  784. return 0;
  785. }
  786. static int lan_saa9730_close(struct net_device *dev)
  787. {
  788. struct lan_saa9730_private *lp =
  789. (struct lan_saa9730_private *) dev->priv;
  790. if (lan_saa9730_debug > 1)
  791. printk("lan_saa9730_close:\n");
  792. netif_stop_queue(dev);
  793. /* Disable the Lan interrupt in the event manager. */
  794. evm_saa9730_disable_lan_int(lp);
  795. /* Stop the controller */
  796. if (lan_saa9730_stop(lp))
  797. return -1;
  798. free_irq(dev->irq, (void *) dev);
  799. return 0;
  800. }
  801. static struct net_device_stats *lan_saa9730_get_stats(struct net_device
  802. *dev)
  803. {
  804. struct lan_saa9730_private *lp =
  805. (struct lan_saa9730_private *) dev->priv;
  806. return &lp->stats;
  807. }
  808. static void lan_saa9730_set_multicast(struct net_device *dev)
  809. {
  810. struct lan_saa9730_private *lp =
  811. (struct lan_saa9730_private *) dev->priv;
  812. /* Stop the controller */
  813. lan_saa9730_stop(lp);
  814. if (dev->flags & IFF_PROMISC) {
  815. /* accept all packets */
  816. OUTL(CAM_CONTROL_COMP_EN | CAM_CONTROL_STATION_ACC |
  817. CAM_CONTROL_GROUP_ACC | CAM_CONTROL_BROAD_ACC,
  818. &lp->lan_saa9730_regs->CamCtl);
  819. } else {
  820. if (dev->flags & IFF_ALLMULTI) {
  821. /* accept all multicast packets */
  822. OUTL(CAM_CONTROL_COMP_EN | CAM_CONTROL_GROUP_ACC |
  823. CAM_CONTROL_BROAD_ACC,
  824. &lp->lan_saa9730_regs->CamCtl);
  825. } else {
  826. /*
  827. * Will handle the multicast stuff later. -carstenl
  828. */
  829. }
  830. }
  831. lan_saa9730_restart(lp);
  832. }
  833. static void __devexit saa9730_remove_one(struct pci_dev *pdev)
  834. {
  835. struct net_device *dev = pci_get_drvdata(pdev);
  836. if (dev) {
  837. unregister_netdev(dev);
  838. kfree(dev->priv);
  839. free_netdev(dev);
  840. pci_release_regions(pdev);
  841. pci_disable_device(pdev);
  842. pci_set_drvdata(pdev, NULL);
  843. }
  844. }
  845. static int lan_saa9730_init(struct net_device *dev, int ioaddr, int irq)
  846. {
  847. struct lan_saa9730_private *lp;
  848. unsigned char ethernet_addr[6];
  849. int ret = 0;
  850. dev->open = lan_saa9730_open_fail;
  851. if (get_ethernet_addr(ethernet_addr))
  852. return -ENODEV;
  853. memcpy(dev->dev_addr, ethernet_addr, 6);
  854. dev->base_addr = ioaddr;
  855. dev->irq = irq;
  856. /*
  857. * Make certain the data structures used by the controller are aligned
  858. * and DMAble.
  859. */
  860. /*
  861. * XXX: that is obviously broken - kfree() won't be happy with us.
  862. */
  863. lp = (struct lan_saa9730_private *) (((unsigned long)
  864. kmalloc(sizeof(*lp) + 7,
  865. GFP_DMA | GFP_KERNEL)
  866. + 7) & ~7);
  867. if (!lp)
  868. return -ENOMEM;
  869. dev->priv = lp;
  870. memset(lp, 0, sizeof(*lp));
  871. /* Set SAA9730 LAN base address. */
  872. lp->lan_saa9730_regs = (t_lan_saa9730_regmap *) (ioaddr +
  873. SAA9730_LAN_REGS_ADDR);
  874. /* Set SAA9730 EVM base address. */
  875. lp->evm_saa9730_regs = (t_evm_saa9730_regmap *) (ioaddr +
  876. SAA9730_EVM_REGS_ADDR);
  877. /* Allocate LAN RX/TX frame buffer space. */
  878. /* FIXME: a leak */
  879. if ((ret = lan_saa9730_allocate_buffers(lp)))
  880. goto out;
  881. /* Stop LAN controller. */
  882. if ((ret = lan_saa9730_stop(lp)))
  883. goto out;
  884. /* Initialize CAM registers. */
  885. if ((ret = lan_saa9730_cam_init(dev)))
  886. goto out;
  887. /* Initialize MII registers. */
  888. if ((ret = lan_saa9730_mii_init(lp)))
  889. goto out;
  890. /* Initialize control registers. */
  891. if ((ret = lan_saa9730_control_init(lp)))
  892. goto out;
  893. /* Load CAM registers. */
  894. if ((ret = lan_saa9730_cam_load(lp)))
  895. goto out;
  896. /* Initialize DMA context registers. */
  897. if ((ret = lan_saa9730_dma_init(lp)))
  898. goto out;
  899. spin_lock_init(&lp->lock);
  900. dev->open = lan_saa9730_open;
  901. dev->hard_start_xmit = lan_saa9730_start_xmit;
  902. dev->stop = lan_saa9730_close;
  903. dev->get_stats = lan_saa9730_get_stats;
  904. dev->set_multicast_list = lan_saa9730_set_multicast;
  905. dev->tx_timeout = lan_saa9730_tx_timeout;
  906. dev->watchdog_timeo = (HZ >> 1);
  907. dev->dma = 0;
  908. ret = register_netdev(dev);
  909. if (ret)
  910. goto out;
  911. return 0;
  912. out:
  913. kfree(dev->priv);
  914. return ret;
  915. }
  916. static int __devinit saa9730_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
  917. {
  918. struct net_device *dev;
  919. unsigned int pci_ioaddr;
  920. int err;
  921. if (lan_saa9730_debug > 1)
  922. printk("saa9730.c: PCI bios is present, checking for devices...\n");
  923. err = -ENOMEM;
  924. dev = alloc_etherdev(0);
  925. if (!dev)
  926. goto out;
  927. SET_MODULE_OWNER(dev);
  928. err = pci_enable_device(pdev);
  929. if (err) {
  930. printk(KERN_ERR "Cannot enable PCI device, aborting.\n");
  931. goto out1;
  932. }
  933. err = pci_request_regions(pdev, DRV_MODULE_NAME);
  934. if (err) {
  935. printk(KERN_ERR "Cannot obtain PCI resources, aborting.\n");
  936. goto out2;
  937. }
  938. pci_irq_line = pdev->irq;
  939. /* LAN base address in located at BAR 1. */
  940. pci_ioaddr = pci_resource_start(pdev, 1);
  941. pci_set_master(pdev);
  942. printk("Found SAA9730 (PCI) at %#x, irq %d.\n",
  943. pci_ioaddr, pci_irq_line);
  944. err = lan_saa9730_init(dev, pci_ioaddr, pci_irq_line);
  945. if (err) {
  946. printk("Lan init failed");
  947. goto out2;
  948. }
  949. pci_set_drvdata(pdev, dev);
  950. SET_NETDEV_DEV(dev, &pdev->dev);
  951. return 0;
  952. out2:
  953. pci_disable_device(pdev);
  954. out1:
  955. free_netdev(dev);
  956. out:
  957. return err;
  958. }
  959. static struct pci_driver saa9730_driver = {
  960. .name = DRV_MODULE_NAME,
  961. .id_table = saa9730_pci_tbl,
  962. .probe = saa9730_init_one,
  963. .remove = __devexit_p(saa9730_remove_one),
  964. };
  965. static int __init saa9730_init(void)
  966. {
  967. return pci_module_init(&saa9730_driver);
  968. }
  969. static void __exit saa9730_cleanup(void)
  970. {
  971. pci_unregister_driver(&saa9730_driver);
  972. }
  973. module_init(saa9730_init);
  974. module_exit(saa9730_cleanup);
  975. MODULE_LICENSE("GPL");