ixgb_main.c 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359
  1. /*******************************************************************************
  2. Intel PRO/10GbE Linux driver
  3. Copyright(c) 1999 - 2006 Intel Corporation.
  4. This program is free software; you can redistribute it and/or modify it
  5. under the terms and conditions of the GNU General Public License,
  6. version 2, as published by the Free Software Foundation.
  7. This program is distributed in the hope it will be useful, but WITHOUT
  8. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  9. FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  10. more details.
  11. You should have received a copy of the GNU General Public License along with
  12. this program; if not, write to the Free Software Foundation, Inc.,
  13. 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  14. The full GNU General Public License is included in this distribution in
  15. the file called "COPYING".
  16. Contact Information:
  17. Linux NICS <linux.nics@intel.com>
  18. e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
  19. Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  20. *******************************************************************************/
  21. #include "ixgb.h"
  22. char ixgb_driver_name[] = "ixgb";
  23. static char ixgb_driver_string[] = "Intel(R) PRO/10GbE Network Driver";
  24. #ifndef CONFIG_IXGB_NAPI
  25. #define DRIVERNAPI
  26. #else
  27. #define DRIVERNAPI "-NAPI"
  28. #endif
  29. #define DRV_VERSION "1.0.126-k2"DRIVERNAPI
  30. const char ixgb_driver_version[] = DRV_VERSION;
  31. static const char ixgb_copyright[] = "Copyright (c) 1999-2006 Intel Corporation.";
  32. /* ixgb_pci_tbl - PCI Device ID Table
  33. *
  34. * Wildcard entries (PCI_ANY_ID) should come last
  35. * Last entry must be all 0s
  36. *
  37. * { Vendor ID, Device ID, SubVendor ID, SubDevice ID,
  38. * Class, Class Mask, private data (not used) }
  39. */
  40. static struct pci_device_id ixgb_pci_tbl[] = {
  41. {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX,
  42. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  43. {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX_CX4,
  44. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  45. {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX_SR,
  46. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  47. {INTEL_VENDOR_ID, IXGB_DEVICE_ID_82597EX_LR,
  48. PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
  49. /* required last entry */
  50. {0,}
  51. };
  52. MODULE_DEVICE_TABLE(pci, ixgb_pci_tbl);
  53. /* Local Function Prototypes */
  54. int ixgb_up(struct ixgb_adapter *adapter);
  55. void ixgb_down(struct ixgb_adapter *adapter, boolean_t kill_watchdog);
  56. void ixgb_reset(struct ixgb_adapter *adapter);
  57. int ixgb_setup_tx_resources(struct ixgb_adapter *adapter);
  58. int ixgb_setup_rx_resources(struct ixgb_adapter *adapter);
  59. void ixgb_free_tx_resources(struct ixgb_adapter *adapter);
  60. void ixgb_free_rx_resources(struct ixgb_adapter *adapter);
  61. void ixgb_update_stats(struct ixgb_adapter *adapter);
  62. static int ixgb_init_module(void);
  63. static void ixgb_exit_module(void);
  64. static int ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
  65. static void __devexit ixgb_remove(struct pci_dev *pdev);
  66. static int ixgb_sw_init(struct ixgb_adapter *adapter);
  67. static int ixgb_open(struct net_device *netdev);
  68. static int ixgb_close(struct net_device *netdev);
  69. static void ixgb_configure_tx(struct ixgb_adapter *adapter);
  70. static void ixgb_configure_rx(struct ixgb_adapter *adapter);
  71. static void ixgb_setup_rctl(struct ixgb_adapter *adapter);
  72. static void ixgb_clean_tx_ring(struct ixgb_adapter *adapter);
  73. static void ixgb_clean_rx_ring(struct ixgb_adapter *adapter);
  74. static void ixgb_set_multi(struct net_device *netdev);
  75. static void ixgb_watchdog(unsigned long data);
  76. static int ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
  77. static struct net_device_stats *ixgb_get_stats(struct net_device *netdev);
  78. static int ixgb_change_mtu(struct net_device *netdev, int new_mtu);
  79. static int ixgb_set_mac(struct net_device *netdev, void *p);
  80. static irqreturn_t ixgb_intr(int irq, void *data);
  81. static boolean_t ixgb_clean_tx_irq(struct ixgb_adapter *adapter);
  82. #ifdef CONFIG_IXGB_NAPI
  83. static int ixgb_clean(struct napi_struct *napi, int budget);
  84. static boolean_t ixgb_clean_rx_irq(struct ixgb_adapter *adapter,
  85. int *work_done, int work_to_do);
  86. #else
  87. static boolean_t ixgb_clean_rx_irq(struct ixgb_adapter *adapter);
  88. #endif
  89. static void ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter);
  90. static void ixgb_tx_timeout(struct net_device *dev);
  91. static void ixgb_tx_timeout_task(struct work_struct *work);
  92. static void ixgb_vlan_rx_register(struct net_device *netdev,
  93. struct vlan_group *grp);
  94. static void ixgb_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
  95. static void ixgb_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
  96. static void ixgb_restore_vlan(struct ixgb_adapter *adapter);
  97. #ifdef CONFIG_NET_POLL_CONTROLLER
  98. /* for netdump / net console */
  99. static void ixgb_netpoll(struct net_device *dev);
  100. #endif
  101. static pci_ers_result_t ixgb_io_error_detected (struct pci_dev *pdev,
  102. enum pci_channel_state state);
  103. static pci_ers_result_t ixgb_io_slot_reset (struct pci_dev *pdev);
  104. static void ixgb_io_resume (struct pci_dev *pdev);
  105. static struct pci_error_handlers ixgb_err_handler = {
  106. .error_detected = ixgb_io_error_detected,
  107. .slot_reset = ixgb_io_slot_reset,
  108. .resume = ixgb_io_resume,
  109. };
  110. static struct pci_driver ixgb_driver = {
  111. .name = ixgb_driver_name,
  112. .id_table = ixgb_pci_tbl,
  113. .probe = ixgb_probe,
  114. .remove = __devexit_p(ixgb_remove),
  115. .err_handler = &ixgb_err_handler
  116. };
  117. MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
  118. MODULE_DESCRIPTION("Intel(R) PRO/10GbE Network Driver");
  119. MODULE_LICENSE("GPL");
  120. MODULE_VERSION(DRV_VERSION);
  121. #define DEFAULT_DEBUG_LEVEL_SHIFT 3
  122. static int debug = DEFAULT_DEBUG_LEVEL_SHIFT;
  123. module_param(debug, int, 0);
  124. MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
  125. /* some defines for controlling descriptor fetches in h/w */
  126. #define RXDCTL_WTHRESH_DEFAULT 15 /* chip writes back at this many or RXT0 */
  127. #define RXDCTL_PTHRESH_DEFAULT 0 /* chip considers prefech below
  128. * this */
  129. #define RXDCTL_HTHRESH_DEFAULT 0 /* chip will only prefetch if tail
  130. * is pushed this many descriptors
  131. * from head */
  132. /**
  133. * ixgb_init_module - Driver Registration Routine
  134. *
  135. * ixgb_init_module is the first routine called when the driver is
  136. * loaded. All it does is register with the PCI subsystem.
  137. **/
  138. static int __init
  139. ixgb_init_module(void)
  140. {
  141. printk(KERN_INFO "%s - version %s\n",
  142. ixgb_driver_string, ixgb_driver_version);
  143. printk(KERN_INFO "%s\n", ixgb_copyright);
  144. return pci_register_driver(&ixgb_driver);
  145. }
  146. module_init(ixgb_init_module);
  147. /**
  148. * ixgb_exit_module - Driver Exit Cleanup Routine
  149. *
  150. * ixgb_exit_module is called just before the driver is removed
  151. * from memory.
  152. **/
  153. static void __exit
  154. ixgb_exit_module(void)
  155. {
  156. pci_unregister_driver(&ixgb_driver);
  157. }
  158. module_exit(ixgb_exit_module);
  159. /**
  160. * ixgb_irq_disable - Mask off interrupt generation on the NIC
  161. * @adapter: board private structure
  162. **/
  163. static void
  164. ixgb_irq_disable(struct ixgb_adapter *adapter)
  165. {
  166. atomic_inc(&adapter->irq_sem);
  167. IXGB_WRITE_REG(&adapter->hw, IMC, ~0);
  168. IXGB_WRITE_FLUSH(&adapter->hw);
  169. synchronize_irq(adapter->pdev->irq);
  170. }
  171. /**
  172. * ixgb_irq_enable - Enable default interrupt generation settings
  173. * @adapter: board private structure
  174. **/
  175. static void
  176. ixgb_irq_enable(struct ixgb_adapter *adapter)
  177. {
  178. if(atomic_dec_and_test(&adapter->irq_sem)) {
  179. IXGB_WRITE_REG(&adapter->hw, IMS,
  180. IXGB_INT_RXT0 | IXGB_INT_RXDMT0 | IXGB_INT_TXDW |
  181. IXGB_INT_LSC);
  182. IXGB_WRITE_FLUSH(&adapter->hw);
  183. }
  184. }
  185. int
  186. ixgb_up(struct ixgb_adapter *adapter)
  187. {
  188. struct net_device *netdev = adapter->netdev;
  189. int err, irq_flags = IRQF_SHARED;
  190. int max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
  191. struct ixgb_hw *hw = &adapter->hw;
  192. /* hardware has been reset, we need to reload some things */
  193. ixgb_rar_set(hw, netdev->dev_addr, 0);
  194. ixgb_set_multi(netdev);
  195. ixgb_restore_vlan(adapter);
  196. ixgb_configure_tx(adapter);
  197. ixgb_setup_rctl(adapter);
  198. ixgb_configure_rx(adapter);
  199. ixgb_alloc_rx_buffers(adapter);
  200. /* disable interrupts and get the hardware into a known state */
  201. IXGB_WRITE_REG(&adapter->hw, IMC, 0xffffffff);
  202. /* only enable MSI if bus is in PCI-X mode */
  203. if (IXGB_READ_REG(&adapter->hw, STATUS) & IXGB_STATUS_PCIX_MODE) {
  204. err = pci_enable_msi(adapter->pdev);
  205. if (!err) {
  206. adapter->have_msi = 1;
  207. irq_flags = 0;
  208. }
  209. /* proceed to try to request regular interrupt */
  210. }
  211. err = request_irq(adapter->pdev->irq, &ixgb_intr, irq_flags,
  212. netdev->name, netdev);
  213. if (err) {
  214. if (adapter->have_msi)
  215. pci_disable_msi(adapter->pdev);
  216. DPRINTK(PROBE, ERR,
  217. "Unable to allocate interrupt Error: %d\n", err);
  218. return err;
  219. }
  220. if((hw->max_frame_size != max_frame) ||
  221. (hw->max_frame_size !=
  222. (IXGB_READ_REG(hw, MFS) >> IXGB_MFS_SHIFT))) {
  223. hw->max_frame_size = max_frame;
  224. IXGB_WRITE_REG(hw, MFS, hw->max_frame_size << IXGB_MFS_SHIFT);
  225. if(hw->max_frame_size >
  226. IXGB_MAX_ENET_FRAME_SIZE_WITHOUT_FCS + ENET_FCS_LENGTH) {
  227. uint32_t ctrl0 = IXGB_READ_REG(hw, CTRL0);
  228. if(!(ctrl0 & IXGB_CTRL0_JFE)) {
  229. ctrl0 |= IXGB_CTRL0_JFE;
  230. IXGB_WRITE_REG(hw, CTRL0, ctrl0);
  231. }
  232. }
  233. }
  234. mod_timer(&adapter->watchdog_timer, jiffies);
  235. #ifdef CONFIG_IXGB_NAPI
  236. napi_enable(&adapter->napi);
  237. #endif
  238. ixgb_irq_enable(adapter);
  239. return 0;
  240. }
  241. void
  242. ixgb_down(struct ixgb_adapter *adapter, boolean_t kill_watchdog)
  243. {
  244. struct net_device *netdev = adapter->netdev;
  245. #ifdef CONFIG_IXGB_NAPI
  246. napi_disable(&adapter->napi);
  247. atomic_set(&adapter->irq_sem, 0);
  248. #endif
  249. ixgb_irq_disable(adapter);
  250. free_irq(adapter->pdev->irq, netdev);
  251. if (adapter->have_msi)
  252. pci_disable_msi(adapter->pdev);
  253. if(kill_watchdog)
  254. del_timer_sync(&adapter->watchdog_timer);
  255. adapter->link_speed = 0;
  256. adapter->link_duplex = 0;
  257. netif_carrier_off(netdev);
  258. netif_stop_queue(netdev);
  259. ixgb_reset(adapter);
  260. ixgb_clean_tx_ring(adapter);
  261. ixgb_clean_rx_ring(adapter);
  262. }
  263. void
  264. ixgb_reset(struct ixgb_adapter *adapter)
  265. {
  266. struct ixgb_hw *hw = &adapter->hw;
  267. ixgb_adapter_stop(hw);
  268. if (!ixgb_init_hw(hw))
  269. DPRINTK(PROBE, ERR, "ixgb_init_hw failed.\n");
  270. /* restore frame size information */
  271. IXGB_WRITE_REG(hw, MFS, hw->max_frame_size << IXGB_MFS_SHIFT);
  272. if (hw->max_frame_size >
  273. IXGB_MAX_ENET_FRAME_SIZE_WITHOUT_FCS + ENET_FCS_LENGTH) {
  274. u32 ctrl0 = IXGB_READ_REG(hw, CTRL0);
  275. if (!(ctrl0 & IXGB_CTRL0_JFE)) {
  276. ctrl0 |= IXGB_CTRL0_JFE;
  277. IXGB_WRITE_REG(hw, CTRL0, ctrl0);
  278. }
  279. }
  280. }
  281. /**
  282. * ixgb_probe - Device Initialization Routine
  283. * @pdev: PCI device information struct
  284. * @ent: entry in ixgb_pci_tbl
  285. *
  286. * Returns 0 on success, negative on failure
  287. *
  288. * ixgb_probe initializes an adapter identified by a pci_dev structure.
  289. * The OS initialization, configuring of the adapter private structure,
  290. * and a hardware reset occur.
  291. **/
  292. static int __devinit
  293. ixgb_probe(struct pci_dev *pdev,
  294. const struct pci_device_id *ent)
  295. {
  296. struct net_device *netdev = NULL;
  297. struct ixgb_adapter *adapter;
  298. static int cards_found = 0;
  299. unsigned long mmio_start;
  300. int mmio_len;
  301. int pci_using_dac;
  302. int i;
  303. int err;
  304. if((err = pci_enable_device(pdev)))
  305. return err;
  306. if(!(err = pci_set_dma_mask(pdev, DMA_64BIT_MASK)) &&
  307. !(err = pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK))) {
  308. pci_using_dac = 1;
  309. } else {
  310. if((err = pci_set_dma_mask(pdev, DMA_32BIT_MASK)) ||
  311. (err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK))) {
  312. printk(KERN_ERR
  313. "ixgb: No usable DMA configuration, aborting\n");
  314. goto err_dma_mask;
  315. }
  316. pci_using_dac = 0;
  317. }
  318. if((err = pci_request_regions(pdev, ixgb_driver_name)))
  319. goto err_request_regions;
  320. pci_set_master(pdev);
  321. netdev = alloc_etherdev(sizeof(struct ixgb_adapter));
  322. if(!netdev) {
  323. err = -ENOMEM;
  324. goto err_alloc_etherdev;
  325. }
  326. SET_NETDEV_DEV(netdev, &pdev->dev);
  327. pci_set_drvdata(pdev, netdev);
  328. adapter = netdev_priv(netdev);
  329. adapter->netdev = netdev;
  330. adapter->pdev = pdev;
  331. adapter->hw.back = adapter;
  332. adapter->msg_enable = netif_msg_init(debug, DEFAULT_DEBUG_LEVEL_SHIFT);
  333. mmio_start = pci_resource_start(pdev, BAR_0);
  334. mmio_len = pci_resource_len(pdev, BAR_0);
  335. adapter->hw.hw_addr = ioremap(mmio_start, mmio_len);
  336. if(!adapter->hw.hw_addr) {
  337. err = -EIO;
  338. goto err_ioremap;
  339. }
  340. for(i = BAR_1; i <= BAR_5; i++) {
  341. if(pci_resource_len(pdev, i) == 0)
  342. continue;
  343. if(pci_resource_flags(pdev, i) & IORESOURCE_IO) {
  344. adapter->hw.io_base = pci_resource_start(pdev, i);
  345. break;
  346. }
  347. }
  348. netdev->open = &ixgb_open;
  349. netdev->stop = &ixgb_close;
  350. netdev->hard_start_xmit = &ixgb_xmit_frame;
  351. netdev->get_stats = &ixgb_get_stats;
  352. netdev->set_multicast_list = &ixgb_set_multi;
  353. netdev->set_mac_address = &ixgb_set_mac;
  354. netdev->change_mtu = &ixgb_change_mtu;
  355. ixgb_set_ethtool_ops(netdev);
  356. netdev->tx_timeout = &ixgb_tx_timeout;
  357. netdev->watchdog_timeo = 5 * HZ;
  358. #ifdef CONFIG_IXGB_NAPI
  359. netif_napi_add(netdev, &adapter->napi, ixgb_clean, 64);
  360. #endif
  361. netdev->vlan_rx_register = ixgb_vlan_rx_register;
  362. netdev->vlan_rx_add_vid = ixgb_vlan_rx_add_vid;
  363. netdev->vlan_rx_kill_vid = ixgb_vlan_rx_kill_vid;
  364. #ifdef CONFIG_NET_POLL_CONTROLLER
  365. netdev->poll_controller = ixgb_netpoll;
  366. #endif
  367. strncpy(netdev->name, pci_name(pdev), sizeof(netdev->name) - 1);
  368. netdev->mem_start = mmio_start;
  369. netdev->mem_end = mmio_start + mmio_len;
  370. netdev->base_addr = adapter->hw.io_base;
  371. adapter->bd_number = cards_found;
  372. adapter->link_speed = 0;
  373. adapter->link_duplex = 0;
  374. /* setup the private structure */
  375. if((err = ixgb_sw_init(adapter)))
  376. goto err_sw_init;
  377. netdev->features = NETIF_F_SG |
  378. NETIF_F_HW_CSUM |
  379. NETIF_F_HW_VLAN_TX |
  380. NETIF_F_HW_VLAN_RX |
  381. NETIF_F_HW_VLAN_FILTER;
  382. netdev->features |= NETIF_F_TSO;
  383. #ifdef NETIF_F_LLTX
  384. netdev->features |= NETIF_F_LLTX;
  385. #endif
  386. if(pci_using_dac)
  387. netdev->features |= NETIF_F_HIGHDMA;
  388. /* make sure the EEPROM is good */
  389. if(!ixgb_validate_eeprom_checksum(&adapter->hw)) {
  390. DPRINTK(PROBE, ERR, "The EEPROM Checksum Is Not Valid\n");
  391. err = -EIO;
  392. goto err_eeprom;
  393. }
  394. ixgb_get_ee_mac_addr(&adapter->hw, netdev->dev_addr);
  395. memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
  396. if(!is_valid_ether_addr(netdev->perm_addr)) {
  397. DPRINTK(PROBE, ERR, "Invalid MAC Address\n");
  398. err = -EIO;
  399. goto err_eeprom;
  400. }
  401. adapter->part_num = ixgb_get_ee_pba_number(&adapter->hw);
  402. init_timer(&adapter->watchdog_timer);
  403. adapter->watchdog_timer.function = &ixgb_watchdog;
  404. adapter->watchdog_timer.data = (unsigned long)adapter;
  405. INIT_WORK(&adapter->tx_timeout_task, ixgb_tx_timeout_task);
  406. strcpy(netdev->name, "eth%d");
  407. if((err = register_netdev(netdev)))
  408. goto err_register;
  409. /* we're going to reset, so assume we have no link for now */
  410. netif_carrier_off(netdev);
  411. netif_stop_queue(netdev);
  412. DPRINTK(PROBE, INFO, "Intel(R) PRO/10GbE Network Connection\n");
  413. ixgb_check_options(adapter);
  414. /* reset the hardware with the new settings */
  415. ixgb_reset(adapter);
  416. cards_found++;
  417. return 0;
  418. err_register:
  419. err_sw_init:
  420. err_eeprom:
  421. iounmap(adapter->hw.hw_addr);
  422. err_ioremap:
  423. free_netdev(netdev);
  424. err_alloc_etherdev:
  425. pci_release_regions(pdev);
  426. err_request_regions:
  427. err_dma_mask:
  428. pci_disable_device(pdev);
  429. return err;
  430. }
  431. /**
  432. * ixgb_remove - Device Removal Routine
  433. * @pdev: PCI device information struct
  434. *
  435. * ixgb_remove is called by the PCI subsystem to alert the driver
  436. * that it should release a PCI device. The could be caused by a
  437. * Hot-Plug event, or because the driver is going to be removed from
  438. * memory.
  439. **/
  440. static void __devexit
  441. ixgb_remove(struct pci_dev *pdev)
  442. {
  443. struct net_device *netdev = pci_get_drvdata(pdev);
  444. struct ixgb_adapter *adapter = netdev_priv(netdev);
  445. unregister_netdev(netdev);
  446. iounmap(adapter->hw.hw_addr);
  447. pci_release_regions(pdev);
  448. free_netdev(netdev);
  449. }
  450. /**
  451. * ixgb_sw_init - Initialize general software structures (struct ixgb_adapter)
  452. * @adapter: board private structure to initialize
  453. *
  454. * ixgb_sw_init initializes the Adapter private data structure.
  455. * Fields are initialized based on PCI device information and
  456. * OS network device settings (MTU size).
  457. **/
  458. static int __devinit
  459. ixgb_sw_init(struct ixgb_adapter *adapter)
  460. {
  461. struct ixgb_hw *hw = &adapter->hw;
  462. struct net_device *netdev = adapter->netdev;
  463. struct pci_dev *pdev = adapter->pdev;
  464. /* PCI config space info */
  465. hw->vendor_id = pdev->vendor;
  466. hw->device_id = pdev->device;
  467. hw->subsystem_vendor_id = pdev->subsystem_vendor;
  468. hw->subsystem_id = pdev->subsystem_device;
  469. hw->max_frame_size = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
  470. adapter->rx_buffer_len = hw->max_frame_size;
  471. if((hw->device_id == IXGB_DEVICE_ID_82597EX)
  472. || (hw->device_id == IXGB_DEVICE_ID_82597EX_CX4)
  473. || (hw->device_id == IXGB_DEVICE_ID_82597EX_LR)
  474. || (hw->device_id == IXGB_DEVICE_ID_82597EX_SR))
  475. hw->mac_type = ixgb_82597;
  476. else {
  477. /* should never have loaded on this device */
  478. DPRINTK(PROBE, ERR, "unsupported device id\n");
  479. }
  480. /* enable flow control to be programmed */
  481. hw->fc.send_xon = 1;
  482. atomic_set(&adapter->irq_sem, 1);
  483. spin_lock_init(&adapter->tx_lock);
  484. return 0;
  485. }
  486. /**
  487. * ixgb_open - Called when a network interface is made active
  488. * @netdev: network interface device structure
  489. *
  490. * Returns 0 on success, negative value on failure
  491. *
  492. * The open entry point is called when a network interface is made
  493. * active by the system (IFF_UP). At this point all resources needed
  494. * for transmit and receive operations are allocated, the interrupt
  495. * handler is registered with the OS, the watchdog timer is started,
  496. * and the stack is notified that the interface is ready.
  497. **/
  498. static int
  499. ixgb_open(struct net_device *netdev)
  500. {
  501. struct ixgb_adapter *adapter = netdev_priv(netdev);
  502. int err;
  503. /* allocate transmit descriptors */
  504. if((err = ixgb_setup_tx_resources(adapter)))
  505. goto err_setup_tx;
  506. /* allocate receive descriptors */
  507. if((err = ixgb_setup_rx_resources(adapter)))
  508. goto err_setup_rx;
  509. if((err = ixgb_up(adapter)))
  510. goto err_up;
  511. return 0;
  512. err_up:
  513. ixgb_free_rx_resources(adapter);
  514. err_setup_rx:
  515. ixgb_free_tx_resources(adapter);
  516. err_setup_tx:
  517. ixgb_reset(adapter);
  518. return err;
  519. }
  520. /**
  521. * ixgb_close - Disables a network interface
  522. * @netdev: network interface device structure
  523. *
  524. * Returns 0, this is not allowed to fail
  525. *
  526. * The close entry point is called when an interface is de-activated
  527. * by the OS. The hardware is still under the drivers control, but
  528. * needs to be disabled. A global MAC reset is issued to stop the
  529. * hardware, and all transmit and receive resources are freed.
  530. **/
  531. static int
  532. ixgb_close(struct net_device *netdev)
  533. {
  534. struct ixgb_adapter *adapter = netdev_priv(netdev);
  535. ixgb_down(adapter, TRUE);
  536. ixgb_free_tx_resources(adapter);
  537. ixgb_free_rx_resources(adapter);
  538. return 0;
  539. }
  540. /**
  541. * ixgb_setup_tx_resources - allocate Tx resources (Descriptors)
  542. * @adapter: board private structure
  543. *
  544. * Return 0 on success, negative on failure
  545. **/
  546. int
  547. ixgb_setup_tx_resources(struct ixgb_adapter *adapter)
  548. {
  549. struct ixgb_desc_ring *txdr = &adapter->tx_ring;
  550. struct pci_dev *pdev = adapter->pdev;
  551. int size;
  552. size = sizeof(struct ixgb_buffer) * txdr->count;
  553. txdr->buffer_info = vmalloc(size);
  554. if(!txdr->buffer_info) {
  555. DPRINTK(PROBE, ERR,
  556. "Unable to allocate transmit descriptor ring memory\n");
  557. return -ENOMEM;
  558. }
  559. memset(txdr->buffer_info, 0, size);
  560. /* round up to nearest 4K */
  561. txdr->size = txdr->count * sizeof(struct ixgb_tx_desc);
  562. txdr->size = ALIGN(txdr->size, 4096);
  563. txdr->desc = pci_alloc_consistent(pdev, txdr->size, &txdr->dma);
  564. if(!txdr->desc) {
  565. vfree(txdr->buffer_info);
  566. DPRINTK(PROBE, ERR,
  567. "Unable to allocate transmit descriptor memory\n");
  568. return -ENOMEM;
  569. }
  570. memset(txdr->desc, 0, txdr->size);
  571. txdr->next_to_use = 0;
  572. txdr->next_to_clean = 0;
  573. return 0;
  574. }
  575. /**
  576. * ixgb_configure_tx - Configure 82597 Transmit Unit after Reset.
  577. * @adapter: board private structure
  578. *
  579. * Configure the Tx unit of the MAC after a reset.
  580. **/
  581. static void
  582. ixgb_configure_tx(struct ixgb_adapter *adapter)
  583. {
  584. uint64_t tdba = adapter->tx_ring.dma;
  585. uint32_t tdlen = adapter->tx_ring.count * sizeof(struct ixgb_tx_desc);
  586. uint32_t tctl;
  587. struct ixgb_hw *hw = &adapter->hw;
  588. /* Setup the Base and Length of the Tx Descriptor Ring
  589. * tx_ring.dma can be either a 32 or 64 bit value
  590. */
  591. IXGB_WRITE_REG(hw, TDBAL, (tdba & 0x00000000ffffffffULL));
  592. IXGB_WRITE_REG(hw, TDBAH, (tdba >> 32));
  593. IXGB_WRITE_REG(hw, TDLEN, tdlen);
  594. /* Setup the HW Tx Head and Tail descriptor pointers */
  595. IXGB_WRITE_REG(hw, TDH, 0);
  596. IXGB_WRITE_REG(hw, TDT, 0);
  597. /* don't set up txdctl, it induces performance problems if configured
  598. * incorrectly */
  599. /* Set the Tx Interrupt Delay register */
  600. IXGB_WRITE_REG(hw, TIDV, adapter->tx_int_delay);
  601. /* Program the Transmit Control Register */
  602. tctl = IXGB_TCTL_TCE | IXGB_TCTL_TXEN | IXGB_TCTL_TPDE;
  603. IXGB_WRITE_REG(hw, TCTL, tctl);
  604. /* Setup Transmit Descriptor Settings for this adapter */
  605. adapter->tx_cmd_type =
  606. IXGB_TX_DESC_TYPE
  607. | (adapter->tx_int_delay_enable ? IXGB_TX_DESC_CMD_IDE : 0);
  608. }
  609. /**
  610. * ixgb_setup_rx_resources - allocate Rx resources (Descriptors)
  611. * @adapter: board private structure
  612. *
  613. * Returns 0 on success, negative on failure
  614. **/
  615. int
  616. ixgb_setup_rx_resources(struct ixgb_adapter *adapter)
  617. {
  618. struct ixgb_desc_ring *rxdr = &adapter->rx_ring;
  619. struct pci_dev *pdev = adapter->pdev;
  620. int size;
  621. size = sizeof(struct ixgb_buffer) * rxdr->count;
  622. rxdr->buffer_info = vmalloc(size);
  623. if(!rxdr->buffer_info) {
  624. DPRINTK(PROBE, ERR,
  625. "Unable to allocate receive descriptor ring\n");
  626. return -ENOMEM;
  627. }
  628. memset(rxdr->buffer_info, 0, size);
  629. /* Round up to nearest 4K */
  630. rxdr->size = rxdr->count * sizeof(struct ixgb_rx_desc);
  631. rxdr->size = ALIGN(rxdr->size, 4096);
  632. rxdr->desc = pci_alloc_consistent(pdev, rxdr->size, &rxdr->dma);
  633. if(!rxdr->desc) {
  634. vfree(rxdr->buffer_info);
  635. DPRINTK(PROBE, ERR,
  636. "Unable to allocate receive descriptors\n");
  637. return -ENOMEM;
  638. }
  639. memset(rxdr->desc, 0, rxdr->size);
  640. rxdr->next_to_clean = 0;
  641. rxdr->next_to_use = 0;
  642. return 0;
  643. }
  644. /**
  645. * ixgb_setup_rctl - configure the receive control register
  646. * @adapter: Board private structure
  647. **/
  648. static void
  649. ixgb_setup_rctl(struct ixgb_adapter *adapter)
  650. {
  651. uint32_t rctl;
  652. rctl = IXGB_READ_REG(&adapter->hw, RCTL);
  653. rctl &= ~(3 << IXGB_RCTL_MO_SHIFT);
  654. rctl |=
  655. IXGB_RCTL_BAM | IXGB_RCTL_RDMTS_1_2 |
  656. IXGB_RCTL_RXEN | IXGB_RCTL_CFF |
  657. (adapter->hw.mc_filter_type << IXGB_RCTL_MO_SHIFT);
  658. rctl |= IXGB_RCTL_SECRC;
  659. if (adapter->rx_buffer_len <= IXGB_RXBUFFER_2048)
  660. rctl |= IXGB_RCTL_BSIZE_2048;
  661. else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_4096)
  662. rctl |= IXGB_RCTL_BSIZE_4096;
  663. else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_8192)
  664. rctl |= IXGB_RCTL_BSIZE_8192;
  665. else if (adapter->rx_buffer_len <= IXGB_RXBUFFER_16384)
  666. rctl |= IXGB_RCTL_BSIZE_16384;
  667. IXGB_WRITE_REG(&adapter->hw, RCTL, rctl);
  668. }
  669. /**
  670. * ixgb_configure_rx - Configure 82597 Receive Unit after Reset.
  671. * @adapter: board private structure
  672. *
  673. * Configure the Rx unit of the MAC after a reset.
  674. **/
  675. static void
  676. ixgb_configure_rx(struct ixgb_adapter *adapter)
  677. {
  678. uint64_t rdba = adapter->rx_ring.dma;
  679. uint32_t rdlen = adapter->rx_ring.count * sizeof(struct ixgb_rx_desc);
  680. struct ixgb_hw *hw = &adapter->hw;
  681. uint32_t rctl;
  682. uint32_t rxcsum;
  683. uint32_t rxdctl;
  684. /* make sure receives are disabled while setting up the descriptors */
  685. rctl = IXGB_READ_REG(hw, RCTL);
  686. IXGB_WRITE_REG(hw, RCTL, rctl & ~IXGB_RCTL_RXEN);
  687. /* set the Receive Delay Timer Register */
  688. IXGB_WRITE_REG(hw, RDTR, adapter->rx_int_delay);
  689. /* Setup the Base and Length of the Rx Descriptor Ring */
  690. IXGB_WRITE_REG(hw, RDBAL, (rdba & 0x00000000ffffffffULL));
  691. IXGB_WRITE_REG(hw, RDBAH, (rdba >> 32));
  692. IXGB_WRITE_REG(hw, RDLEN, rdlen);
  693. /* Setup the HW Rx Head and Tail Descriptor Pointers */
  694. IXGB_WRITE_REG(hw, RDH, 0);
  695. IXGB_WRITE_REG(hw, RDT, 0);
  696. /* set up pre-fetching of receive buffers so we get some before we
  697. * run out (default hardware behavior is to run out before fetching
  698. * more). This sets up to fetch if HTHRESH rx descriptors are avail
  699. * and the descriptors in hw cache are below PTHRESH. This avoids
  700. * the hardware behavior of fetching <=512 descriptors in a single
  701. * burst that pre-empts all other activity, usually causing fifo
  702. * overflows. */
  703. /* use WTHRESH to burst write 16 descriptors or burst when RXT0 */
  704. rxdctl = RXDCTL_WTHRESH_DEFAULT << IXGB_RXDCTL_WTHRESH_SHIFT |
  705. RXDCTL_HTHRESH_DEFAULT << IXGB_RXDCTL_HTHRESH_SHIFT |
  706. RXDCTL_PTHRESH_DEFAULT << IXGB_RXDCTL_PTHRESH_SHIFT;
  707. IXGB_WRITE_REG(hw, RXDCTL, rxdctl);
  708. /* Enable Receive Checksum Offload for TCP and UDP */
  709. if(adapter->rx_csum == TRUE) {
  710. rxcsum = IXGB_READ_REG(hw, RXCSUM);
  711. rxcsum |= IXGB_RXCSUM_TUOFL;
  712. IXGB_WRITE_REG(hw, RXCSUM, rxcsum);
  713. }
  714. /* Enable Receives */
  715. IXGB_WRITE_REG(hw, RCTL, rctl);
  716. }
  717. /**
  718. * ixgb_free_tx_resources - Free Tx Resources
  719. * @adapter: board private structure
  720. *
  721. * Free all transmit software resources
  722. **/
  723. void
  724. ixgb_free_tx_resources(struct ixgb_adapter *adapter)
  725. {
  726. struct pci_dev *pdev = adapter->pdev;
  727. ixgb_clean_tx_ring(adapter);
  728. vfree(adapter->tx_ring.buffer_info);
  729. adapter->tx_ring.buffer_info = NULL;
  730. pci_free_consistent(pdev, adapter->tx_ring.size,
  731. adapter->tx_ring.desc, adapter->tx_ring.dma);
  732. adapter->tx_ring.desc = NULL;
  733. }
  734. static void
  735. ixgb_unmap_and_free_tx_resource(struct ixgb_adapter *adapter,
  736. struct ixgb_buffer *buffer_info)
  737. {
  738. struct pci_dev *pdev = adapter->pdev;
  739. if (buffer_info->dma)
  740. pci_unmap_page(pdev, buffer_info->dma, buffer_info->length,
  741. PCI_DMA_TODEVICE);
  742. if (buffer_info->skb)
  743. dev_kfree_skb_any(buffer_info->skb);
  744. buffer_info->skb = NULL;
  745. buffer_info->dma = 0;
  746. buffer_info->time_stamp = 0;
  747. /* these fields must always be initialized in tx
  748. * buffer_info->length = 0;
  749. * buffer_info->next_to_watch = 0; */
  750. }
  751. /**
  752. * ixgb_clean_tx_ring - Free Tx Buffers
  753. * @adapter: board private structure
  754. **/
  755. static void
  756. ixgb_clean_tx_ring(struct ixgb_adapter *adapter)
  757. {
  758. struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
  759. struct ixgb_buffer *buffer_info;
  760. unsigned long size;
  761. unsigned int i;
  762. /* Free all the Tx ring sk_buffs */
  763. for(i = 0; i < tx_ring->count; i++) {
  764. buffer_info = &tx_ring->buffer_info[i];
  765. ixgb_unmap_and_free_tx_resource(adapter, buffer_info);
  766. }
  767. size = sizeof(struct ixgb_buffer) * tx_ring->count;
  768. memset(tx_ring->buffer_info, 0, size);
  769. /* Zero out the descriptor ring */
  770. memset(tx_ring->desc, 0, tx_ring->size);
  771. tx_ring->next_to_use = 0;
  772. tx_ring->next_to_clean = 0;
  773. IXGB_WRITE_REG(&adapter->hw, TDH, 0);
  774. IXGB_WRITE_REG(&adapter->hw, TDT, 0);
  775. }
  776. /**
  777. * ixgb_free_rx_resources - Free Rx Resources
  778. * @adapter: board private structure
  779. *
  780. * Free all receive software resources
  781. **/
  782. void
  783. ixgb_free_rx_resources(struct ixgb_adapter *adapter)
  784. {
  785. struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
  786. struct pci_dev *pdev = adapter->pdev;
  787. ixgb_clean_rx_ring(adapter);
  788. vfree(rx_ring->buffer_info);
  789. rx_ring->buffer_info = NULL;
  790. pci_free_consistent(pdev, rx_ring->size, rx_ring->desc, rx_ring->dma);
  791. rx_ring->desc = NULL;
  792. }
  793. /**
  794. * ixgb_clean_rx_ring - Free Rx Buffers
  795. * @adapter: board private structure
  796. **/
  797. static void
  798. ixgb_clean_rx_ring(struct ixgb_adapter *adapter)
  799. {
  800. struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
  801. struct ixgb_buffer *buffer_info;
  802. struct pci_dev *pdev = adapter->pdev;
  803. unsigned long size;
  804. unsigned int i;
  805. /* Free all the Rx ring sk_buffs */
  806. for(i = 0; i < rx_ring->count; i++) {
  807. buffer_info = &rx_ring->buffer_info[i];
  808. if(buffer_info->skb) {
  809. pci_unmap_single(pdev,
  810. buffer_info->dma,
  811. buffer_info->length,
  812. PCI_DMA_FROMDEVICE);
  813. dev_kfree_skb(buffer_info->skb);
  814. buffer_info->skb = NULL;
  815. }
  816. }
  817. size = sizeof(struct ixgb_buffer) * rx_ring->count;
  818. memset(rx_ring->buffer_info, 0, size);
  819. /* Zero out the descriptor ring */
  820. memset(rx_ring->desc, 0, rx_ring->size);
  821. rx_ring->next_to_clean = 0;
  822. rx_ring->next_to_use = 0;
  823. IXGB_WRITE_REG(&adapter->hw, RDH, 0);
  824. IXGB_WRITE_REG(&adapter->hw, RDT, 0);
  825. }
  826. /**
  827. * ixgb_set_mac - Change the Ethernet Address of the NIC
  828. * @netdev: network interface device structure
  829. * @p: pointer to an address structure
  830. *
  831. * Returns 0 on success, negative on failure
  832. **/
  833. static int
  834. ixgb_set_mac(struct net_device *netdev, void *p)
  835. {
  836. struct ixgb_adapter *adapter = netdev_priv(netdev);
  837. struct sockaddr *addr = p;
  838. if(!is_valid_ether_addr(addr->sa_data))
  839. return -EADDRNOTAVAIL;
  840. memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
  841. ixgb_rar_set(&adapter->hw, addr->sa_data, 0);
  842. return 0;
  843. }
  844. /**
  845. * ixgb_set_multi - Multicast and Promiscuous mode set
  846. * @netdev: network interface device structure
  847. *
  848. * The set_multi entry point is called whenever the multicast address
  849. * list or the network interface flags are updated. This routine is
  850. * responsible for configuring the hardware for proper multicast,
  851. * promiscuous mode, and all-multi behavior.
  852. **/
  853. static void
  854. ixgb_set_multi(struct net_device *netdev)
  855. {
  856. struct ixgb_adapter *adapter = netdev_priv(netdev);
  857. struct ixgb_hw *hw = &adapter->hw;
  858. struct dev_mc_list *mc_ptr;
  859. uint32_t rctl;
  860. int i;
  861. /* Check for Promiscuous and All Multicast modes */
  862. rctl = IXGB_READ_REG(hw, RCTL);
  863. if(netdev->flags & IFF_PROMISC) {
  864. rctl |= (IXGB_RCTL_UPE | IXGB_RCTL_MPE);
  865. } else if(netdev->flags & IFF_ALLMULTI) {
  866. rctl |= IXGB_RCTL_MPE;
  867. rctl &= ~IXGB_RCTL_UPE;
  868. } else {
  869. rctl &= ~(IXGB_RCTL_UPE | IXGB_RCTL_MPE);
  870. }
  871. if(netdev->mc_count > IXGB_MAX_NUM_MULTICAST_ADDRESSES) {
  872. rctl |= IXGB_RCTL_MPE;
  873. IXGB_WRITE_REG(hw, RCTL, rctl);
  874. } else {
  875. uint8_t mta[IXGB_MAX_NUM_MULTICAST_ADDRESSES *
  876. IXGB_ETH_LENGTH_OF_ADDRESS];
  877. IXGB_WRITE_REG(hw, RCTL, rctl);
  878. for(i = 0, mc_ptr = netdev->mc_list; mc_ptr;
  879. i++, mc_ptr = mc_ptr->next)
  880. memcpy(&mta[i * IXGB_ETH_LENGTH_OF_ADDRESS],
  881. mc_ptr->dmi_addr, IXGB_ETH_LENGTH_OF_ADDRESS);
  882. ixgb_mc_addr_list_update(hw, mta, netdev->mc_count, 0);
  883. }
  884. }
  885. /**
  886. * ixgb_watchdog - Timer Call-back
  887. * @data: pointer to netdev cast into an unsigned long
  888. **/
  889. static void
  890. ixgb_watchdog(unsigned long data)
  891. {
  892. struct ixgb_adapter *adapter = (struct ixgb_adapter *)data;
  893. struct net_device *netdev = adapter->netdev;
  894. struct ixgb_desc_ring *txdr = &adapter->tx_ring;
  895. ixgb_check_for_link(&adapter->hw);
  896. if (ixgb_check_for_bad_link(&adapter->hw)) {
  897. /* force the reset path */
  898. netif_stop_queue(netdev);
  899. }
  900. if(adapter->hw.link_up) {
  901. if(!netif_carrier_ok(netdev)) {
  902. DPRINTK(LINK, INFO,
  903. "NIC Link is Up 10000 Mbps Full Duplex\n");
  904. adapter->link_speed = 10000;
  905. adapter->link_duplex = FULL_DUPLEX;
  906. netif_carrier_on(netdev);
  907. netif_wake_queue(netdev);
  908. }
  909. } else {
  910. if(netif_carrier_ok(netdev)) {
  911. adapter->link_speed = 0;
  912. adapter->link_duplex = 0;
  913. DPRINTK(LINK, INFO, "NIC Link is Down\n");
  914. netif_carrier_off(netdev);
  915. netif_stop_queue(netdev);
  916. }
  917. }
  918. ixgb_update_stats(adapter);
  919. if(!netif_carrier_ok(netdev)) {
  920. if(IXGB_DESC_UNUSED(txdr) + 1 < txdr->count) {
  921. /* We've lost link, so the controller stops DMA,
  922. * but we've got queued Tx work that's never going
  923. * to get done, so reset controller to flush Tx.
  924. * (Do the reset outside of interrupt context). */
  925. schedule_work(&adapter->tx_timeout_task);
  926. }
  927. }
  928. /* Force detection of hung controller every watchdog period */
  929. adapter->detect_tx_hung = TRUE;
  930. /* generate an interrupt to force clean up of any stragglers */
  931. IXGB_WRITE_REG(&adapter->hw, ICS, IXGB_INT_TXDW);
  932. /* Reset the timer */
  933. mod_timer(&adapter->watchdog_timer, jiffies + 2 * HZ);
  934. }
  935. #define IXGB_TX_FLAGS_CSUM 0x00000001
  936. #define IXGB_TX_FLAGS_VLAN 0x00000002
  937. #define IXGB_TX_FLAGS_TSO 0x00000004
  938. static int
  939. ixgb_tso(struct ixgb_adapter *adapter, struct sk_buff *skb)
  940. {
  941. struct ixgb_context_desc *context_desc;
  942. unsigned int i;
  943. uint8_t ipcss, ipcso, tucss, tucso, hdr_len;
  944. uint16_t ipcse, tucse, mss;
  945. int err;
  946. if (likely(skb_is_gso(skb))) {
  947. struct ixgb_buffer *buffer_info;
  948. struct iphdr *iph;
  949. if (skb_header_cloned(skb)) {
  950. err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
  951. if (err)
  952. return err;
  953. }
  954. hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
  955. mss = skb_shinfo(skb)->gso_size;
  956. iph = ip_hdr(skb);
  957. iph->tot_len = 0;
  958. iph->check = 0;
  959. tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
  960. iph->daddr, 0,
  961. IPPROTO_TCP, 0);
  962. ipcss = skb_network_offset(skb);
  963. ipcso = (void *)&(iph->check) - (void *)skb->data;
  964. ipcse = skb_transport_offset(skb) - 1;
  965. tucss = skb_transport_offset(skb);
  966. tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data;
  967. tucse = 0;
  968. i = adapter->tx_ring.next_to_use;
  969. context_desc = IXGB_CONTEXT_DESC(adapter->tx_ring, i);
  970. buffer_info = &adapter->tx_ring.buffer_info[i];
  971. WARN_ON(buffer_info->dma != 0);
  972. context_desc->ipcss = ipcss;
  973. context_desc->ipcso = ipcso;
  974. context_desc->ipcse = cpu_to_le16(ipcse);
  975. context_desc->tucss = tucss;
  976. context_desc->tucso = tucso;
  977. context_desc->tucse = cpu_to_le16(tucse);
  978. context_desc->mss = cpu_to_le16(mss);
  979. context_desc->hdr_len = hdr_len;
  980. context_desc->status = 0;
  981. context_desc->cmd_type_len = cpu_to_le32(
  982. IXGB_CONTEXT_DESC_TYPE
  983. | IXGB_CONTEXT_DESC_CMD_TSE
  984. | IXGB_CONTEXT_DESC_CMD_IP
  985. | IXGB_CONTEXT_DESC_CMD_TCP
  986. | IXGB_CONTEXT_DESC_CMD_IDE
  987. | (skb->len - (hdr_len)));
  988. if(++i == adapter->tx_ring.count) i = 0;
  989. adapter->tx_ring.next_to_use = i;
  990. return 1;
  991. }
  992. return 0;
  993. }
  994. static boolean_t
  995. ixgb_tx_csum(struct ixgb_adapter *adapter, struct sk_buff *skb)
  996. {
  997. struct ixgb_context_desc *context_desc;
  998. unsigned int i;
  999. uint8_t css, cso;
  1000. if(likely(skb->ip_summed == CHECKSUM_PARTIAL)) {
  1001. struct ixgb_buffer *buffer_info;
  1002. css = skb_transport_offset(skb);
  1003. cso = css + skb->csum_offset;
  1004. i = adapter->tx_ring.next_to_use;
  1005. context_desc = IXGB_CONTEXT_DESC(adapter->tx_ring, i);
  1006. buffer_info = &adapter->tx_ring.buffer_info[i];
  1007. WARN_ON(buffer_info->dma != 0);
  1008. context_desc->tucss = css;
  1009. context_desc->tucso = cso;
  1010. context_desc->tucse = 0;
  1011. /* zero out any previously existing data in one instruction */
  1012. *(uint32_t *)&(context_desc->ipcss) = 0;
  1013. context_desc->status = 0;
  1014. context_desc->hdr_len = 0;
  1015. context_desc->mss = 0;
  1016. context_desc->cmd_type_len =
  1017. cpu_to_le32(IXGB_CONTEXT_DESC_TYPE
  1018. | IXGB_TX_DESC_CMD_IDE);
  1019. if(++i == adapter->tx_ring.count) i = 0;
  1020. adapter->tx_ring.next_to_use = i;
  1021. return TRUE;
  1022. }
  1023. return FALSE;
  1024. }
  1025. #define IXGB_MAX_TXD_PWR 14
  1026. #define IXGB_MAX_DATA_PER_TXD (1<<IXGB_MAX_TXD_PWR)
  1027. static int
  1028. ixgb_tx_map(struct ixgb_adapter *adapter, struct sk_buff *skb,
  1029. unsigned int first)
  1030. {
  1031. struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
  1032. struct ixgb_buffer *buffer_info;
  1033. int len = skb->len;
  1034. unsigned int offset = 0, size, count = 0, i;
  1035. unsigned int mss = skb_shinfo(skb)->gso_size;
  1036. unsigned int nr_frags = skb_shinfo(skb)->nr_frags;
  1037. unsigned int f;
  1038. len -= skb->data_len;
  1039. i = tx_ring->next_to_use;
  1040. while(len) {
  1041. buffer_info = &tx_ring->buffer_info[i];
  1042. size = min(len, IXGB_MAX_DATA_PER_TXD);
  1043. /* Workaround for premature desc write-backs
  1044. * in TSO mode. Append 4-byte sentinel desc */
  1045. if (unlikely(mss && !nr_frags && size == len && size > 8))
  1046. size -= 4;
  1047. buffer_info->length = size;
  1048. WARN_ON(buffer_info->dma != 0);
  1049. buffer_info->dma =
  1050. pci_map_single(adapter->pdev,
  1051. skb->data + offset,
  1052. size,
  1053. PCI_DMA_TODEVICE);
  1054. buffer_info->time_stamp = jiffies;
  1055. buffer_info->next_to_watch = 0;
  1056. len -= size;
  1057. offset += size;
  1058. count++;
  1059. if(++i == tx_ring->count) i = 0;
  1060. }
  1061. for(f = 0; f < nr_frags; f++) {
  1062. struct skb_frag_struct *frag;
  1063. frag = &skb_shinfo(skb)->frags[f];
  1064. len = frag->size;
  1065. offset = 0;
  1066. while(len) {
  1067. buffer_info = &tx_ring->buffer_info[i];
  1068. size = min(len, IXGB_MAX_DATA_PER_TXD);
  1069. /* Workaround for premature desc write-backs
  1070. * in TSO mode. Append 4-byte sentinel desc */
  1071. if (unlikely(mss && (f == (nr_frags - 1))
  1072. && size == len && size > 8))
  1073. size -= 4;
  1074. buffer_info->length = size;
  1075. buffer_info->dma =
  1076. pci_map_page(adapter->pdev,
  1077. frag->page,
  1078. frag->page_offset + offset,
  1079. size,
  1080. PCI_DMA_TODEVICE);
  1081. buffer_info->time_stamp = jiffies;
  1082. buffer_info->next_to_watch = 0;
  1083. len -= size;
  1084. offset += size;
  1085. count++;
  1086. if(++i == tx_ring->count) i = 0;
  1087. }
  1088. }
  1089. i = (i == 0) ? tx_ring->count - 1 : i - 1;
  1090. tx_ring->buffer_info[i].skb = skb;
  1091. tx_ring->buffer_info[first].next_to_watch = i;
  1092. return count;
  1093. }
  1094. static void
  1095. ixgb_tx_queue(struct ixgb_adapter *adapter, int count, int vlan_id,int tx_flags)
  1096. {
  1097. struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
  1098. struct ixgb_tx_desc *tx_desc = NULL;
  1099. struct ixgb_buffer *buffer_info;
  1100. uint32_t cmd_type_len = adapter->tx_cmd_type;
  1101. uint8_t status = 0;
  1102. uint8_t popts = 0;
  1103. unsigned int i;
  1104. if(tx_flags & IXGB_TX_FLAGS_TSO) {
  1105. cmd_type_len |= IXGB_TX_DESC_CMD_TSE;
  1106. popts |= (IXGB_TX_DESC_POPTS_IXSM | IXGB_TX_DESC_POPTS_TXSM);
  1107. }
  1108. if(tx_flags & IXGB_TX_FLAGS_CSUM)
  1109. popts |= IXGB_TX_DESC_POPTS_TXSM;
  1110. if(tx_flags & IXGB_TX_FLAGS_VLAN) {
  1111. cmd_type_len |= IXGB_TX_DESC_CMD_VLE;
  1112. }
  1113. i = tx_ring->next_to_use;
  1114. while(count--) {
  1115. buffer_info = &tx_ring->buffer_info[i];
  1116. tx_desc = IXGB_TX_DESC(*tx_ring, i);
  1117. tx_desc->buff_addr = cpu_to_le64(buffer_info->dma);
  1118. tx_desc->cmd_type_len =
  1119. cpu_to_le32(cmd_type_len | buffer_info->length);
  1120. tx_desc->status = status;
  1121. tx_desc->popts = popts;
  1122. tx_desc->vlan = cpu_to_le16(vlan_id);
  1123. if(++i == tx_ring->count) i = 0;
  1124. }
  1125. tx_desc->cmd_type_len |= cpu_to_le32(IXGB_TX_DESC_CMD_EOP
  1126. | IXGB_TX_DESC_CMD_RS );
  1127. /* Force memory writes to complete before letting h/w
  1128. * know there are new descriptors to fetch. (Only
  1129. * applicable for weak-ordered memory model archs,
  1130. * such as IA-64). */
  1131. wmb();
  1132. tx_ring->next_to_use = i;
  1133. IXGB_WRITE_REG(&adapter->hw, TDT, i);
  1134. }
  1135. static int __ixgb_maybe_stop_tx(struct net_device *netdev, int size)
  1136. {
  1137. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1138. struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
  1139. netif_stop_queue(netdev);
  1140. /* Herbert's original patch had:
  1141. * smp_mb__after_netif_stop_queue();
  1142. * but since that doesn't exist yet, just open code it. */
  1143. smp_mb();
  1144. /* We need to check again in a case another CPU has just
  1145. * made room available. */
  1146. if (likely(IXGB_DESC_UNUSED(tx_ring) < size))
  1147. return -EBUSY;
  1148. /* A reprieve! */
  1149. netif_start_queue(netdev);
  1150. ++adapter->restart_queue;
  1151. return 0;
  1152. }
  1153. static int ixgb_maybe_stop_tx(struct net_device *netdev,
  1154. struct ixgb_desc_ring *tx_ring, int size)
  1155. {
  1156. if (likely(IXGB_DESC_UNUSED(tx_ring) >= size))
  1157. return 0;
  1158. return __ixgb_maybe_stop_tx(netdev, size);
  1159. }
  1160. /* Tx Descriptors needed, worst case */
  1161. #define TXD_USE_COUNT(S) (((S) >> IXGB_MAX_TXD_PWR) + \
  1162. (((S) & (IXGB_MAX_DATA_PER_TXD - 1)) ? 1 : 0))
  1163. #define DESC_NEEDED TXD_USE_COUNT(IXGB_MAX_DATA_PER_TXD) /* skb->date */ + \
  1164. MAX_SKB_FRAGS * TXD_USE_COUNT(PAGE_SIZE) + 1 /* for context */ \
  1165. + 1 /* one more needed for sentinel TSO workaround */
  1166. static int
  1167. ixgb_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
  1168. {
  1169. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1170. unsigned int first;
  1171. unsigned int tx_flags = 0;
  1172. unsigned long flags;
  1173. int vlan_id = 0;
  1174. int tso;
  1175. if(skb->len <= 0) {
  1176. dev_kfree_skb_any(skb);
  1177. return 0;
  1178. }
  1179. #ifdef NETIF_F_LLTX
  1180. local_irq_save(flags);
  1181. if (!spin_trylock(&adapter->tx_lock)) {
  1182. /* Collision - tell upper layer to requeue */
  1183. local_irq_restore(flags);
  1184. return NETDEV_TX_LOCKED;
  1185. }
  1186. #else
  1187. spin_lock_irqsave(&adapter->tx_lock, flags);
  1188. #endif
  1189. if (unlikely(ixgb_maybe_stop_tx(netdev, &adapter->tx_ring,
  1190. DESC_NEEDED))) {
  1191. netif_stop_queue(netdev);
  1192. spin_unlock_irqrestore(&adapter->tx_lock, flags);
  1193. return NETDEV_TX_BUSY;
  1194. }
  1195. #ifndef NETIF_F_LLTX
  1196. spin_unlock_irqrestore(&adapter->tx_lock, flags);
  1197. #endif
  1198. if(adapter->vlgrp && vlan_tx_tag_present(skb)) {
  1199. tx_flags |= IXGB_TX_FLAGS_VLAN;
  1200. vlan_id = vlan_tx_tag_get(skb);
  1201. }
  1202. first = adapter->tx_ring.next_to_use;
  1203. tso = ixgb_tso(adapter, skb);
  1204. if (tso < 0) {
  1205. dev_kfree_skb_any(skb);
  1206. #ifdef NETIF_F_LLTX
  1207. spin_unlock_irqrestore(&adapter->tx_lock, flags);
  1208. #endif
  1209. return NETDEV_TX_OK;
  1210. }
  1211. if (likely(tso))
  1212. tx_flags |= IXGB_TX_FLAGS_TSO;
  1213. else if(ixgb_tx_csum(adapter, skb))
  1214. tx_flags |= IXGB_TX_FLAGS_CSUM;
  1215. ixgb_tx_queue(adapter, ixgb_tx_map(adapter, skb, first), vlan_id,
  1216. tx_flags);
  1217. netdev->trans_start = jiffies;
  1218. #ifdef NETIF_F_LLTX
  1219. /* Make sure there is space in the ring for the next send. */
  1220. ixgb_maybe_stop_tx(netdev, &adapter->tx_ring, DESC_NEEDED);
  1221. spin_unlock_irqrestore(&adapter->tx_lock, flags);
  1222. #endif
  1223. return NETDEV_TX_OK;
  1224. }
  1225. /**
  1226. * ixgb_tx_timeout - Respond to a Tx Hang
  1227. * @netdev: network interface device structure
  1228. **/
  1229. static void
  1230. ixgb_tx_timeout(struct net_device *netdev)
  1231. {
  1232. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1233. /* Do the reset outside of interrupt context */
  1234. schedule_work(&adapter->tx_timeout_task);
  1235. }
  1236. static void
  1237. ixgb_tx_timeout_task(struct work_struct *work)
  1238. {
  1239. struct ixgb_adapter *adapter =
  1240. container_of(work, struct ixgb_adapter, tx_timeout_task);
  1241. adapter->tx_timeout_count++;
  1242. ixgb_down(adapter, TRUE);
  1243. ixgb_up(adapter);
  1244. }
  1245. /**
  1246. * ixgb_get_stats - Get System Network Statistics
  1247. * @netdev: network interface device structure
  1248. *
  1249. * Returns the address of the device statistics structure.
  1250. * The statistics are actually updated from the timer callback.
  1251. **/
  1252. static struct net_device_stats *
  1253. ixgb_get_stats(struct net_device *netdev)
  1254. {
  1255. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1256. return &adapter->net_stats;
  1257. }
  1258. /**
  1259. * ixgb_change_mtu - Change the Maximum Transfer Unit
  1260. * @netdev: network interface device structure
  1261. * @new_mtu: new value for maximum frame size
  1262. *
  1263. * Returns 0 on success, negative on failure
  1264. **/
  1265. static int
  1266. ixgb_change_mtu(struct net_device *netdev, int new_mtu)
  1267. {
  1268. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1269. int max_frame = new_mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
  1270. int old_max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH;
  1271. if((max_frame < IXGB_MIN_ENET_FRAME_SIZE_WITHOUT_FCS + ENET_FCS_LENGTH)
  1272. || (max_frame > IXGB_MAX_JUMBO_FRAME_SIZE + ENET_FCS_LENGTH)) {
  1273. DPRINTK(PROBE, ERR, "Invalid MTU setting %d\n", new_mtu);
  1274. return -EINVAL;
  1275. }
  1276. adapter->rx_buffer_len = max_frame;
  1277. netdev->mtu = new_mtu;
  1278. if ((old_max_frame != max_frame) && netif_running(netdev)) {
  1279. ixgb_down(adapter, TRUE);
  1280. ixgb_up(adapter);
  1281. }
  1282. return 0;
  1283. }
  1284. /**
  1285. * ixgb_update_stats - Update the board statistics counters.
  1286. * @adapter: board private structure
  1287. **/
  1288. void
  1289. ixgb_update_stats(struct ixgb_adapter *adapter)
  1290. {
  1291. struct net_device *netdev = adapter->netdev;
  1292. struct pci_dev *pdev = adapter->pdev;
  1293. /* Prevent stats update while adapter is being reset */
  1294. if (pci_channel_offline(pdev))
  1295. return;
  1296. if((netdev->flags & IFF_PROMISC) || (netdev->flags & IFF_ALLMULTI) ||
  1297. (netdev->mc_count > IXGB_MAX_NUM_MULTICAST_ADDRESSES)) {
  1298. u64 multi = IXGB_READ_REG(&adapter->hw, MPRCL);
  1299. u32 bcast_l = IXGB_READ_REG(&adapter->hw, BPRCL);
  1300. u32 bcast_h = IXGB_READ_REG(&adapter->hw, BPRCH);
  1301. u64 bcast = ((u64)bcast_h << 32) | bcast_l;
  1302. multi |= ((u64)IXGB_READ_REG(&adapter->hw, MPRCH) << 32);
  1303. /* fix up multicast stats by removing broadcasts */
  1304. if(multi >= bcast)
  1305. multi -= bcast;
  1306. adapter->stats.mprcl += (multi & 0xFFFFFFFF);
  1307. adapter->stats.mprch += (multi >> 32);
  1308. adapter->stats.bprcl += bcast_l;
  1309. adapter->stats.bprch += bcast_h;
  1310. } else {
  1311. adapter->stats.mprcl += IXGB_READ_REG(&adapter->hw, MPRCL);
  1312. adapter->stats.mprch += IXGB_READ_REG(&adapter->hw, MPRCH);
  1313. adapter->stats.bprcl += IXGB_READ_REG(&adapter->hw, BPRCL);
  1314. adapter->stats.bprch += IXGB_READ_REG(&adapter->hw, BPRCH);
  1315. }
  1316. adapter->stats.tprl += IXGB_READ_REG(&adapter->hw, TPRL);
  1317. adapter->stats.tprh += IXGB_READ_REG(&adapter->hw, TPRH);
  1318. adapter->stats.gprcl += IXGB_READ_REG(&adapter->hw, GPRCL);
  1319. adapter->stats.gprch += IXGB_READ_REG(&adapter->hw, GPRCH);
  1320. adapter->stats.uprcl += IXGB_READ_REG(&adapter->hw, UPRCL);
  1321. adapter->stats.uprch += IXGB_READ_REG(&adapter->hw, UPRCH);
  1322. adapter->stats.vprcl += IXGB_READ_REG(&adapter->hw, VPRCL);
  1323. adapter->stats.vprch += IXGB_READ_REG(&adapter->hw, VPRCH);
  1324. adapter->stats.jprcl += IXGB_READ_REG(&adapter->hw, JPRCL);
  1325. adapter->stats.jprch += IXGB_READ_REG(&adapter->hw, JPRCH);
  1326. adapter->stats.gorcl += IXGB_READ_REG(&adapter->hw, GORCL);
  1327. adapter->stats.gorch += IXGB_READ_REG(&adapter->hw, GORCH);
  1328. adapter->stats.torl += IXGB_READ_REG(&adapter->hw, TORL);
  1329. adapter->stats.torh += IXGB_READ_REG(&adapter->hw, TORH);
  1330. adapter->stats.rnbc += IXGB_READ_REG(&adapter->hw, RNBC);
  1331. adapter->stats.ruc += IXGB_READ_REG(&adapter->hw, RUC);
  1332. adapter->stats.roc += IXGB_READ_REG(&adapter->hw, ROC);
  1333. adapter->stats.rlec += IXGB_READ_REG(&adapter->hw, RLEC);
  1334. adapter->stats.crcerrs += IXGB_READ_REG(&adapter->hw, CRCERRS);
  1335. adapter->stats.icbc += IXGB_READ_REG(&adapter->hw, ICBC);
  1336. adapter->stats.ecbc += IXGB_READ_REG(&adapter->hw, ECBC);
  1337. adapter->stats.mpc += IXGB_READ_REG(&adapter->hw, MPC);
  1338. adapter->stats.tptl += IXGB_READ_REG(&adapter->hw, TPTL);
  1339. adapter->stats.tpth += IXGB_READ_REG(&adapter->hw, TPTH);
  1340. adapter->stats.gptcl += IXGB_READ_REG(&adapter->hw, GPTCL);
  1341. adapter->stats.gptch += IXGB_READ_REG(&adapter->hw, GPTCH);
  1342. adapter->stats.bptcl += IXGB_READ_REG(&adapter->hw, BPTCL);
  1343. adapter->stats.bptch += IXGB_READ_REG(&adapter->hw, BPTCH);
  1344. adapter->stats.mptcl += IXGB_READ_REG(&adapter->hw, MPTCL);
  1345. adapter->stats.mptch += IXGB_READ_REG(&adapter->hw, MPTCH);
  1346. adapter->stats.uptcl += IXGB_READ_REG(&adapter->hw, UPTCL);
  1347. adapter->stats.uptch += IXGB_READ_REG(&adapter->hw, UPTCH);
  1348. adapter->stats.vptcl += IXGB_READ_REG(&adapter->hw, VPTCL);
  1349. adapter->stats.vptch += IXGB_READ_REG(&adapter->hw, VPTCH);
  1350. adapter->stats.jptcl += IXGB_READ_REG(&adapter->hw, JPTCL);
  1351. adapter->stats.jptch += IXGB_READ_REG(&adapter->hw, JPTCH);
  1352. adapter->stats.gotcl += IXGB_READ_REG(&adapter->hw, GOTCL);
  1353. adapter->stats.gotch += IXGB_READ_REG(&adapter->hw, GOTCH);
  1354. adapter->stats.totl += IXGB_READ_REG(&adapter->hw, TOTL);
  1355. adapter->stats.toth += IXGB_READ_REG(&adapter->hw, TOTH);
  1356. adapter->stats.dc += IXGB_READ_REG(&adapter->hw, DC);
  1357. adapter->stats.plt64c += IXGB_READ_REG(&adapter->hw, PLT64C);
  1358. adapter->stats.tsctc += IXGB_READ_REG(&adapter->hw, TSCTC);
  1359. adapter->stats.tsctfc += IXGB_READ_REG(&adapter->hw, TSCTFC);
  1360. adapter->stats.ibic += IXGB_READ_REG(&adapter->hw, IBIC);
  1361. adapter->stats.rfc += IXGB_READ_REG(&adapter->hw, RFC);
  1362. adapter->stats.lfc += IXGB_READ_REG(&adapter->hw, LFC);
  1363. adapter->stats.pfrc += IXGB_READ_REG(&adapter->hw, PFRC);
  1364. adapter->stats.pftc += IXGB_READ_REG(&adapter->hw, PFTC);
  1365. adapter->stats.mcfrc += IXGB_READ_REG(&adapter->hw, MCFRC);
  1366. adapter->stats.mcftc += IXGB_READ_REG(&adapter->hw, MCFTC);
  1367. adapter->stats.xonrxc += IXGB_READ_REG(&adapter->hw, XONRXC);
  1368. adapter->stats.xontxc += IXGB_READ_REG(&adapter->hw, XONTXC);
  1369. adapter->stats.xoffrxc += IXGB_READ_REG(&adapter->hw, XOFFRXC);
  1370. adapter->stats.xofftxc += IXGB_READ_REG(&adapter->hw, XOFFTXC);
  1371. adapter->stats.rjc += IXGB_READ_REG(&adapter->hw, RJC);
  1372. /* Fill out the OS statistics structure */
  1373. adapter->net_stats.rx_packets = adapter->stats.gprcl;
  1374. adapter->net_stats.tx_packets = adapter->stats.gptcl;
  1375. adapter->net_stats.rx_bytes = adapter->stats.gorcl;
  1376. adapter->net_stats.tx_bytes = adapter->stats.gotcl;
  1377. adapter->net_stats.multicast = adapter->stats.mprcl;
  1378. adapter->net_stats.collisions = 0;
  1379. /* ignore RLEC as it reports errors for padded (<64bytes) frames
  1380. * with a length in the type/len field */
  1381. adapter->net_stats.rx_errors =
  1382. /* adapter->stats.rnbc + */ adapter->stats.crcerrs +
  1383. adapter->stats.ruc +
  1384. adapter->stats.roc /*+ adapter->stats.rlec */ +
  1385. adapter->stats.icbc +
  1386. adapter->stats.ecbc + adapter->stats.mpc;
  1387. /* see above
  1388. * adapter->net_stats.rx_length_errors = adapter->stats.rlec;
  1389. */
  1390. adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
  1391. adapter->net_stats.rx_fifo_errors = adapter->stats.mpc;
  1392. adapter->net_stats.rx_missed_errors = adapter->stats.mpc;
  1393. adapter->net_stats.rx_over_errors = adapter->stats.mpc;
  1394. adapter->net_stats.tx_errors = 0;
  1395. adapter->net_stats.rx_frame_errors = 0;
  1396. adapter->net_stats.tx_aborted_errors = 0;
  1397. adapter->net_stats.tx_carrier_errors = 0;
  1398. adapter->net_stats.tx_fifo_errors = 0;
  1399. adapter->net_stats.tx_heartbeat_errors = 0;
  1400. adapter->net_stats.tx_window_errors = 0;
  1401. }
  1402. #define IXGB_MAX_INTR 10
  1403. /**
  1404. * ixgb_intr - Interrupt Handler
  1405. * @irq: interrupt number
  1406. * @data: pointer to a network interface device structure
  1407. **/
  1408. static irqreturn_t
  1409. ixgb_intr(int irq, void *data)
  1410. {
  1411. struct net_device *netdev = data;
  1412. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1413. struct ixgb_hw *hw = &adapter->hw;
  1414. uint32_t icr = IXGB_READ_REG(hw, ICR);
  1415. #ifndef CONFIG_IXGB_NAPI
  1416. unsigned int i;
  1417. #endif
  1418. if(unlikely(!icr))
  1419. return IRQ_NONE; /* Not our interrupt */
  1420. if(unlikely(icr & (IXGB_INT_RXSEQ | IXGB_INT_LSC))) {
  1421. mod_timer(&adapter->watchdog_timer, jiffies);
  1422. }
  1423. #ifdef CONFIG_IXGB_NAPI
  1424. if (netif_rx_schedule_prep(netdev, &adapter->napi)) {
  1425. /* Disable interrupts and register for poll. The flush
  1426. of the posted write is intentionally left out.
  1427. */
  1428. atomic_inc(&adapter->irq_sem);
  1429. IXGB_WRITE_REG(&adapter->hw, IMC, ~0);
  1430. __netif_rx_schedule(netdev, &adapter->napi);
  1431. }
  1432. #else
  1433. /* yes, that is actually a & and it is meant to make sure that
  1434. * every pass through this for loop checks both receive and
  1435. * transmit queues for completed descriptors, intended to
  1436. * avoid starvation issues and assist tx/rx fairness. */
  1437. for(i = 0; i < IXGB_MAX_INTR; i++)
  1438. if(!ixgb_clean_rx_irq(adapter) &
  1439. !ixgb_clean_tx_irq(adapter))
  1440. break;
  1441. #endif
  1442. return IRQ_HANDLED;
  1443. }
  1444. #ifdef CONFIG_IXGB_NAPI
  1445. /**
  1446. * ixgb_clean - NAPI Rx polling callback
  1447. * @adapter: board private structure
  1448. **/
  1449. static int
  1450. ixgb_clean(struct napi_struct *napi, int budget)
  1451. {
  1452. struct ixgb_adapter *adapter = container_of(napi, struct ixgb_adapter, napi);
  1453. struct net_device *netdev = adapter->netdev;
  1454. int work_done = 0;
  1455. ixgb_clean_tx_irq(adapter);
  1456. ixgb_clean_rx_irq(adapter, &work_done, budget);
  1457. /* If budget not fully consumed, exit the polling mode */
  1458. if (work_done < budget) {
  1459. netif_rx_complete(netdev, napi);
  1460. ixgb_irq_enable(adapter);
  1461. }
  1462. return work_done;
  1463. }
  1464. #endif
  1465. /**
  1466. * ixgb_clean_tx_irq - Reclaim resources after transmit completes
  1467. * @adapter: board private structure
  1468. **/
  1469. static boolean_t
  1470. ixgb_clean_tx_irq(struct ixgb_adapter *adapter)
  1471. {
  1472. struct ixgb_desc_ring *tx_ring = &adapter->tx_ring;
  1473. struct net_device *netdev = adapter->netdev;
  1474. struct ixgb_tx_desc *tx_desc, *eop_desc;
  1475. struct ixgb_buffer *buffer_info;
  1476. unsigned int i, eop;
  1477. boolean_t cleaned = FALSE;
  1478. i = tx_ring->next_to_clean;
  1479. eop = tx_ring->buffer_info[i].next_to_watch;
  1480. eop_desc = IXGB_TX_DESC(*tx_ring, eop);
  1481. while(eop_desc->status & IXGB_TX_DESC_STATUS_DD) {
  1482. for(cleaned = FALSE; !cleaned; ) {
  1483. tx_desc = IXGB_TX_DESC(*tx_ring, i);
  1484. buffer_info = &tx_ring->buffer_info[i];
  1485. if (tx_desc->popts
  1486. & (IXGB_TX_DESC_POPTS_TXSM |
  1487. IXGB_TX_DESC_POPTS_IXSM))
  1488. adapter->hw_csum_tx_good++;
  1489. ixgb_unmap_and_free_tx_resource(adapter, buffer_info);
  1490. *(uint32_t *)&(tx_desc->status) = 0;
  1491. cleaned = (i == eop);
  1492. if(++i == tx_ring->count) i = 0;
  1493. }
  1494. eop = tx_ring->buffer_info[i].next_to_watch;
  1495. eop_desc = IXGB_TX_DESC(*tx_ring, eop);
  1496. }
  1497. tx_ring->next_to_clean = i;
  1498. if (unlikely(netif_queue_stopped(netdev))) {
  1499. spin_lock(&adapter->tx_lock);
  1500. if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev) &&
  1501. (IXGB_DESC_UNUSED(tx_ring) >= DESC_NEEDED))
  1502. netif_wake_queue(netdev);
  1503. spin_unlock(&adapter->tx_lock);
  1504. }
  1505. if(adapter->detect_tx_hung) {
  1506. /* detect a transmit hang in hardware, this serializes the
  1507. * check with the clearing of time_stamp and movement of i */
  1508. adapter->detect_tx_hung = FALSE;
  1509. if (tx_ring->buffer_info[eop].dma &&
  1510. time_after(jiffies, tx_ring->buffer_info[eop].time_stamp + HZ)
  1511. && !(IXGB_READ_REG(&adapter->hw, STATUS) &
  1512. IXGB_STATUS_TXOFF)) {
  1513. /* detected Tx unit hang */
  1514. DPRINTK(DRV, ERR, "Detected Tx Unit Hang\n"
  1515. " TDH <%x>\n"
  1516. " TDT <%x>\n"
  1517. " next_to_use <%x>\n"
  1518. " next_to_clean <%x>\n"
  1519. "buffer_info[next_to_clean]\n"
  1520. " time_stamp <%lx>\n"
  1521. " next_to_watch <%x>\n"
  1522. " jiffies <%lx>\n"
  1523. " next_to_watch.status <%x>\n",
  1524. IXGB_READ_REG(&adapter->hw, TDH),
  1525. IXGB_READ_REG(&adapter->hw, TDT),
  1526. tx_ring->next_to_use,
  1527. tx_ring->next_to_clean,
  1528. tx_ring->buffer_info[eop].time_stamp,
  1529. eop,
  1530. jiffies,
  1531. eop_desc->status);
  1532. netif_stop_queue(netdev);
  1533. }
  1534. }
  1535. return cleaned;
  1536. }
  1537. /**
  1538. * ixgb_rx_checksum - Receive Checksum Offload for 82597.
  1539. * @adapter: board private structure
  1540. * @rx_desc: receive descriptor
  1541. * @sk_buff: socket buffer with received data
  1542. **/
  1543. static void
  1544. ixgb_rx_checksum(struct ixgb_adapter *adapter,
  1545. struct ixgb_rx_desc *rx_desc,
  1546. struct sk_buff *skb)
  1547. {
  1548. /* Ignore Checksum bit is set OR
  1549. * TCP Checksum has not been calculated
  1550. */
  1551. if((rx_desc->status & IXGB_RX_DESC_STATUS_IXSM) ||
  1552. (!(rx_desc->status & IXGB_RX_DESC_STATUS_TCPCS))) {
  1553. skb->ip_summed = CHECKSUM_NONE;
  1554. return;
  1555. }
  1556. /* At this point we know the hardware did the TCP checksum */
  1557. /* now look at the TCP checksum error bit */
  1558. if(rx_desc->errors & IXGB_RX_DESC_ERRORS_TCPE) {
  1559. /* let the stack verify checksum errors */
  1560. skb->ip_summed = CHECKSUM_NONE;
  1561. adapter->hw_csum_rx_error++;
  1562. } else {
  1563. /* TCP checksum is good */
  1564. skb->ip_summed = CHECKSUM_UNNECESSARY;
  1565. adapter->hw_csum_rx_good++;
  1566. }
  1567. }
  1568. /**
  1569. * ixgb_clean_rx_irq - Send received data up the network stack,
  1570. * @adapter: board private structure
  1571. **/
  1572. static boolean_t
  1573. #ifdef CONFIG_IXGB_NAPI
  1574. ixgb_clean_rx_irq(struct ixgb_adapter *adapter, int *work_done, int work_to_do)
  1575. #else
  1576. ixgb_clean_rx_irq(struct ixgb_adapter *adapter)
  1577. #endif
  1578. {
  1579. struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
  1580. struct net_device *netdev = adapter->netdev;
  1581. struct pci_dev *pdev = adapter->pdev;
  1582. struct ixgb_rx_desc *rx_desc, *next_rxd;
  1583. struct ixgb_buffer *buffer_info, *next_buffer, *next2_buffer;
  1584. uint32_t length;
  1585. unsigned int i, j;
  1586. boolean_t cleaned = FALSE;
  1587. i = rx_ring->next_to_clean;
  1588. rx_desc = IXGB_RX_DESC(*rx_ring, i);
  1589. buffer_info = &rx_ring->buffer_info[i];
  1590. while(rx_desc->status & IXGB_RX_DESC_STATUS_DD) {
  1591. struct sk_buff *skb, *next_skb;
  1592. u8 status;
  1593. #ifdef CONFIG_IXGB_NAPI
  1594. if(*work_done >= work_to_do)
  1595. break;
  1596. (*work_done)++;
  1597. #endif
  1598. status = rx_desc->status;
  1599. skb = buffer_info->skb;
  1600. buffer_info->skb = NULL;
  1601. prefetch(skb->data);
  1602. if(++i == rx_ring->count) i = 0;
  1603. next_rxd = IXGB_RX_DESC(*rx_ring, i);
  1604. prefetch(next_rxd);
  1605. if((j = i + 1) == rx_ring->count) j = 0;
  1606. next2_buffer = &rx_ring->buffer_info[j];
  1607. prefetch(next2_buffer);
  1608. next_buffer = &rx_ring->buffer_info[i];
  1609. next_skb = next_buffer->skb;
  1610. prefetch(next_skb);
  1611. cleaned = TRUE;
  1612. pci_unmap_single(pdev,
  1613. buffer_info->dma,
  1614. buffer_info->length,
  1615. PCI_DMA_FROMDEVICE);
  1616. length = le16_to_cpu(rx_desc->length);
  1617. if(unlikely(!(status & IXGB_RX_DESC_STATUS_EOP))) {
  1618. /* All receives must fit into a single buffer */
  1619. IXGB_DBG("Receive packet consumed multiple buffers "
  1620. "length<%x>\n", length);
  1621. dev_kfree_skb_irq(skb);
  1622. goto rxdesc_done;
  1623. }
  1624. if (unlikely(rx_desc->errors
  1625. & (IXGB_RX_DESC_ERRORS_CE | IXGB_RX_DESC_ERRORS_SE
  1626. | IXGB_RX_DESC_ERRORS_P |
  1627. IXGB_RX_DESC_ERRORS_RXE))) {
  1628. dev_kfree_skb_irq(skb);
  1629. goto rxdesc_done;
  1630. }
  1631. /* code added for copybreak, this should improve
  1632. * performance for small packets with large amounts
  1633. * of reassembly being done in the stack */
  1634. #define IXGB_CB_LENGTH 256
  1635. if (length < IXGB_CB_LENGTH) {
  1636. struct sk_buff *new_skb =
  1637. netdev_alloc_skb(netdev, length + NET_IP_ALIGN);
  1638. if (new_skb) {
  1639. skb_reserve(new_skb, NET_IP_ALIGN);
  1640. skb_copy_to_linear_data_offset(new_skb,
  1641. -NET_IP_ALIGN,
  1642. (skb->data -
  1643. NET_IP_ALIGN),
  1644. (length +
  1645. NET_IP_ALIGN));
  1646. /* save the skb in buffer_info as good */
  1647. buffer_info->skb = skb;
  1648. skb = new_skb;
  1649. }
  1650. }
  1651. /* end copybreak code */
  1652. /* Good Receive */
  1653. skb_put(skb, length);
  1654. /* Receive Checksum Offload */
  1655. ixgb_rx_checksum(adapter, rx_desc, skb);
  1656. skb->protocol = eth_type_trans(skb, netdev);
  1657. #ifdef CONFIG_IXGB_NAPI
  1658. if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
  1659. vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
  1660. le16_to_cpu(rx_desc->special) &
  1661. IXGB_RX_DESC_SPECIAL_VLAN_MASK);
  1662. } else {
  1663. netif_receive_skb(skb);
  1664. }
  1665. #else /* CONFIG_IXGB_NAPI */
  1666. if(adapter->vlgrp && (status & IXGB_RX_DESC_STATUS_VP)) {
  1667. vlan_hwaccel_rx(skb, adapter->vlgrp,
  1668. le16_to_cpu(rx_desc->special) &
  1669. IXGB_RX_DESC_SPECIAL_VLAN_MASK);
  1670. } else {
  1671. netif_rx(skb);
  1672. }
  1673. #endif /* CONFIG_IXGB_NAPI */
  1674. netdev->last_rx = jiffies;
  1675. rxdesc_done:
  1676. /* clean up descriptor, might be written over by hw */
  1677. rx_desc->status = 0;
  1678. /* use prefetched values */
  1679. rx_desc = next_rxd;
  1680. buffer_info = next_buffer;
  1681. }
  1682. rx_ring->next_to_clean = i;
  1683. ixgb_alloc_rx_buffers(adapter);
  1684. return cleaned;
  1685. }
  1686. /**
  1687. * ixgb_alloc_rx_buffers - Replace used receive buffers
  1688. * @adapter: address of board private structure
  1689. **/
  1690. static void
  1691. ixgb_alloc_rx_buffers(struct ixgb_adapter *adapter)
  1692. {
  1693. struct ixgb_desc_ring *rx_ring = &adapter->rx_ring;
  1694. struct net_device *netdev = adapter->netdev;
  1695. struct pci_dev *pdev = adapter->pdev;
  1696. struct ixgb_rx_desc *rx_desc;
  1697. struct ixgb_buffer *buffer_info;
  1698. struct sk_buff *skb;
  1699. unsigned int i;
  1700. int num_group_tail_writes;
  1701. long cleancount;
  1702. i = rx_ring->next_to_use;
  1703. buffer_info = &rx_ring->buffer_info[i];
  1704. cleancount = IXGB_DESC_UNUSED(rx_ring);
  1705. num_group_tail_writes = IXGB_RX_BUFFER_WRITE;
  1706. /* leave three descriptors unused */
  1707. while(--cleancount > 2) {
  1708. /* recycle! its good for you */
  1709. skb = buffer_info->skb;
  1710. if (skb) {
  1711. skb_trim(skb, 0);
  1712. goto map_skb;
  1713. }
  1714. skb = netdev_alloc_skb(netdev, adapter->rx_buffer_len
  1715. + NET_IP_ALIGN);
  1716. if (unlikely(!skb)) {
  1717. /* Better luck next round */
  1718. adapter->alloc_rx_buff_failed++;
  1719. break;
  1720. }
  1721. /* Make buffer alignment 2 beyond a 16 byte boundary
  1722. * this will result in a 16 byte aligned IP header after
  1723. * the 14 byte MAC header is removed
  1724. */
  1725. skb_reserve(skb, NET_IP_ALIGN);
  1726. buffer_info->skb = skb;
  1727. buffer_info->length = adapter->rx_buffer_len;
  1728. map_skb:
  1729. buffer_info->dma = pci_map_single(pdev,
  1730. skb->data,
  1731. adapter->rx_buffer_len,
  1732. PCI_DMA_FROMDEVICE);
  1733. rx_desc = IXGB_RX_DESC(*rx_ring, i);
  1734. rx_desc->buff_addr = cpu_to_le64(buffer_info->dma);
  1735. /* guarantee DD bit not set now before h/w gets descriptor
  1736. * this is the rest of the workaround for h/w double
  1737. * writeback. */
  1738. rx_desc->status = 0;
  1739. if(++i == rx_ring->count) i = 0;
  1740. buffer_info = &rx_ring->buffer_info[i];
  1741. }
  1742. if (likely(rx_ring->next_to_use != i)) {
  1743. rx_ring->next_to_use = i;
  1744. if (unlikely(i-- == 0))
  1745. i = (rx_ring->count - 1);
  1746. /* Force memory writes to complete before letting h/w
  1747. * know there are new descriptors to fetch. (Only
  1748. * applicable for weak-ordered memory model archs, such
  1749. * as IA-64). */
  1750. wmb();
  1751. IXGB_WRITE_REG(&adapter->hw, RDT, i);
  1752. }
  1753. }
  1754. /**
  1755. * ixgb_vlan_rx_register - enables or disables vlan tagging/stripping.
  1756. *
  1757. * @param netdev network interface device structure
  1758. * @param grp indicates to enable or disable tagging/stripping
  1759. **/
  1760. static void
  1761. ixgb_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
  1762. {
  1763. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1764. uint32_t ctrl, rctl;
  1765. ixgb_irq_disable(adapter);
  1766. adapter->vlgrp = grp;
  1767. if(grp) {
  1768. /* enable VLAN tag insert/strip */
  1769. ctrl = IXGB_READ_REG(&adapter->hw, CTRL0);
  1770. ctrl |= IXGB_CTRL0_VME;
  1771. IXGB_WRITE_REG(&adapter->hw, CTRL0, ctrl);
  1772. /* enable VLAN receive filtering */
  1773. rctl = IXGB_READ_REG(&adapter->hw, RCTL);
  1774. rctl |= IXGB_RCTL_VFE;
  1775. rctl &= ~IXGB_RCTL_CFIEN;
  1776. IXGB_WRITE_REG(&adapter->hw, RCTL, rctl);
  1777. } else {
  1778. /* disable VLAN tag insert/strip */
  1779. ctrl = IXGB_READ_REG(&adapter->hw, CTRL0);
  1780. ctrl &= ~IXGB_CTRL0_VME;
  1781. IXGB_WRITE_REG(&adapter->hw, CTRL0, ctrl);
  1782. /* disable VLAN filtering */
  1783. rctl = IXGB_READ_REG(&adapter->hw, RCTL);
  1784. rctl &= ~IXGB_RCTL_VFE;
  1785. IXGB_WRITE_REG(&adapter->hw, RCTL, rctl);
  1786. }
  1787. ixgb_irq_enable(adapter);
  1788. }
  1789. static void
  1790. ixgb_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid)
  1791. {
  1792. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1793. uint32_t vfta, index;
  1794. /* add VID to filter table */
  1795. index = (vid >> 5) & 0x7F;
  1796. vfta = IXGB_READ_REG_ARRAY(&adapter->hw, VFTA, index);
  1797. vfta |= (1 << (vid & 0x1F));
  1798. ixgb_write_vfta(&adapter->hw, index, vfta);
  1799. }
  1800. static void
  1801. ixgb_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid)
  1802. {
  1803. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1804. uint32_t vfta, index;
  1805. ixgb_irq_disable(adapter);
  1806. vlan_group_set_device(adapter->vlgrp, vid, NULL);
  1807. ixgb_irq_enable(adapter);
  1808. /* remove VID from filter table*/
  1809. index = (vid >> 5) & 0x7F;
  1810. vfta = IXGB_READ_REG_ARRAY(&adapter->hw, VFTA, index);
  1811. vfta &= ~(1 << (vid & 0x1F));
  1812. ixgb_write_vfta(&adapter->hw, index, vfta);
  1813. }
  1814. static void
  1815. ixgb_restore_vlan(struct ixgb_adapter *adapter)
  1816. {
  1817. ixgb_vlan_rx_register(adapter->netdev, adapter->vlgrp);
  1818. if(adapter->vlgrp) {
  1819. uint16_t vid;
  1820. for(vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
  1821. if(!vlan_group_get_device(adapter->vlgrp, vid))
  1822. continue;
  1823. ixgb_vlan_rx_add_vid(adapter->netdev, vid);
  1824. }
  1825. }
  1826. }
  1827. #ifdef CONFIG_NET_POLL_CONTROLLER
  1828. /*
  1829. * Polling 'interrupt' - used by things like netconsole to send skbs
  1830. * without having to re-enable interrupts. It's not called while
  1831. * the interrupt routine is executing.
  1832. */
  1833. static void ixgb_netpoll(struct net_device *dev)
  1834. {
  1835. struct ixgb_adapter *adapter = netdev_priv(dev);
  1836. disable_irq(adapter->pdev->irq);
  1837. ixgb_intr(adapter->pdev->irq, dev);
  1838. enable_irq(adapter->pdev->irq);
  1839. }
  1840. #endif
  1841. /**
  1842. * ixgb_io_error_detected() - called when PCI error is detected
  1843. * @pdev pointer to pci device with error
  1844. * @state pci channel state after error
  1845. *
  1846. * This callback is called by the PCI subsystem whenever
  1847. * a PCI bus error is detected.
  1848. */
  1849. static pci_ers_result_t ixgb_io_error_detected (struct pci_dev *pdev,
  1850. enum pci_channel_state state)
  1851. {
  1852. struct net_device *netdev = pci_get_drvdata(pdev);
  1853. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1854. if(netif_running(netdev))
  1855. ixgb_down(adapter, TRUE);
  1856. pci_disable_device(pdev);
  1857. /* Request a slot reset. */
  1858. return PCI_ERS_RESULT_NEED_RESET;
  1859. }
  1860. /**
  1861. * ixgb_io_slot_reset - called after the pci bus has been reset.
  1862. * @pdev pointer to pci device with error
  1863. *
  1864. * This callback is called after the PCI buss has been reset.
  1865. * Basically, this tries to restart the card from scratch.
  1866. * This is a shortened version of the device probe/discovery code,
  1867. * it resembles the first-half of the ixgb_probe() routine.
  1868. */
  1869. static pci_ers_result_t ixgb_io_slot_reset (struct pci_dev *pdev)
  1870. {
  1871. struct net_device *netdev = pci_get_drvdata(pdev);
  1872. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1873. if(pci_enable_device(pdev)) {
  1874. DPRINTK(PROBE, ERR, "Cannot re-enable PCI device after reset.\n");
  1875. return PCI_ERS_RESULT_DISCONNECT;
  1876. }
  1877. /* Perform card reset only on one instance of the card */
  1878. if (0 != PCI_FUNC (pdev->devfn))
  1879. return PCI_ERS_RESULT_RECOVERED;
  1880. pci_set_master(pdev);
  1881. netif_carrier_off(netdev);
  1882. netif_stop_queue(netdev);
  1883. ixgb_reset(adapter);
  1884. /* Make sure the EEPROM is good */
  1885. if(!ixgb_validate_eeprom_checksum(&adapter->hw)) {
  1886. DPRINTK(PROBE, ERR, "After reset, the EEPROM checksum is not valid.\n");
  1887. return PCI_ERS_RESULT_DISCONNECT;
  1888. }
  1889. ixgb_get_ee_mac_addr(&adapter->hw, netdev->dev_addr);
  1890. memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
  1891. if(!is_valid_ether_addr(netdev->perm_addr)) {
  1892. DPRINTK(PROBE, ERR, "After reset, invalid MAC address.\n");
  1893. return PCI_ERS_RESULT_DISCONNECT;
  1894. }
  1895. return PCI_ERS_RESULT_RECOVERED;
  1896. }
  1897. /**
  1898. * ixgb_io_resume - called when its OK to resume normal operations
  1899. * @pdev pointer to pci device with error
  1900. *
  1901. * The error recovery driver tells us that its OK to resume
  1902. * normal operation. Implementation resembles the second-half
  1903. * of the ixgb_probe() routine.
  1904. */
  1905. static void ixgb_io_resume (struct pci_dev *pdev)
  1906. {
  1907. struct net_device *netdev = pci_get_drvdata(pdev);
  1908. struct ixgb_adapter *adapter = netdev_priv(netdev);
  1909. pci_set_master(pdev);
  1910. if(netif_running(netdev)) {
  1911. if(ixgb_up(adapter)) {
  1912. printk ("ixgb: can't bring device back up after reset\n");
  1913. return;
  1914. }
  1915. }
  1916. netif_device_attach(netdev);
  1917. mod_timer(&adapter->watchdog_timer, jiffies);
  1918. }
  1919. /* ixgb_main.c */