ibmveth.c 52 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * IBM Power Virtual Ethernet Device Driver
  4. *
  5. * Copyright (C) IBM Corporation, 2003, 2010
  6. *
  7. * Authors: Dave Larson <larson1@us.ibm.com>
  8. * Santiago Leon <santil@linux.vnet.ibm.com>
  9. * Brian King <brking@linux.vnet.ibm.com>
  10. * Robert Jennings <rcj@linux.vnet.ibm.com>
  11. * Anton Blanchard <anton@au.ibm.com>
  12. */
  13. #include <linux/module.h>
  14. #include <linux/types.h>
  15. #include <linux/errno.h>
  16. #include <linux/dma-mapping.h>
  17. #include <linux/kernel.h>
  18. #include <linux/netdevice.h>
  19. #include <linux/etherdevice.h>
  20. #include <linux/skbuff.h>
  21. #include <linux/init.h>
  22. #include <linux/interrupt.h>
  23. #include <linux/mm.h>
  24. #include <linux/pm.h>
  25. #include <linux/ethtool.h>
  26. #include <linux/in.h>
  27. #include <linux/ip.h>
  28. #include <linux/ipv6.h>
  29. #include <linux/slab.h>
  30. #include <asm/hvcall.h>
  31. #include <linux/atomic.h>
  32. #include <asm/vio.h>
  33. #include <asm/iommu.h>
  34. #include <asm/firmware.h>
  35. #include <net/tcp.h>
  36. #include <net/ip6_checksum.h>
  37. #include "ibmveth.h"
  38. static irqreturn_t ibmveth_interrupt(int irq, void *dev_instance);
  39. static void ibmveth_rxq_harvest_buffer(struct ibmveth_adapter *adapter,
  40. bool reuse);
  41. static unsigned long ibmveth_get_desired_dma(struct vio_dev *vdev);
  42. static struct kobj_type ktype_veth_pool;
  43. static const char ibmveth_driver_name[] = "ibmveth";
  44. static const char ibmveth_driver_string[] = "IBM Power Virtual Ethernet Driver";
  45. #define ibmveth_driver_version "1.06"
  46. MODULE_AUTHOR("Santiago Leon <santil@linux.vnet.ibm.com>");
  47. MODULE_DESCRIPTION("IBM Power Virtual Ethernet Driver");
  48. MODULE_LICENSE("GPL");
  49. MODULE_VERSION(ibmveth_driver_version);
  50. static unsigned int tx_copybreak __read_mostly = 128;
  51. module_param(tx_copybreak, uint, 0644);
  52. MODULE_PARM_DESC(tx_copybreak,
  53. "Maximum size of packet that is copied to a new buffer on transmit");
  54. static unsigned int rx_copybreak __read_mostly = 128;
  55. module_param(rx_copybreak, uint, 0644);
  56. MODULE_PARM_DESC(rx_copybreak,
  57. "Maximum size of packet that is copied to a new buffer on receive");
  58. static unsigned int rx_flush __read_mostly = 0;
  59. module_param(rx_flush, uint, 0644);
  60. MODULE_PARM_DESC(rx_flush, "Flush receive buffers before use");
  61. static bool old_large_send __read_mostly;
  62. module_param(old_large_send, bool, 0444);
  63. MODULE_PARM_DESC(old_large_send,
  64. "Use old large send method on firmware that supports the new method");
  65. struct ibmveth_stat {
  66. char name[ETH_GSTRING_LEN];
  67. int offset;
  68. };
  69. #define IBMVETH_STAT_OFF(stat) offsetof(struct ibmveth_adapter, stat)
  70. #define IBMVETH_GET_STAT(a, off) *((u64 *)(((unsigned long)(a)) + off))
  71. static struct ibmveth_stat ibmveth_stats[] = {
  72. { "replenish_task_cycles", IBMVETH_STAT_OFF(replenish_task_cycles) },
  73. { "replenish_no_mem", IBMVETH_STAT_OFF(replenish_no_mem) },
  74. { "replenish_add_buff_failure",
  75. IBMVETH_STAT_OFF(replenish_add_buff_failure) },
  76. { "replenish_add_buff_success",
  77. IBMVETH_STAT_OFF(replenish_add_buff_success) },
  78. { "rx_invalid_buffer", IBMVETH_STAT_OFF(rx_invalid_buffer) },
  79. { "rx_no_buffer", IBMVETH_STAT_OFF(rx_no_buffer) },
  80. { "tx_map_failed", IBMVETH_STAT_OFF(tx_map_failed) },
  81. { "tx_send_failed", IBMVETH_STAT_OFF(tx_send_failed) },
  82. { "fw_enabled_ipv4_csum", IBMVETH_STAT_OFF(fw_ipv4_csum_support) },
  83. { "fw_enabled_ipv6_csum", IBMVETH_STAT_OFF(fw_ipv6_csum_support) },
  84. { "tx_large_packets", IBMVETH_STAT_OFF(tx_large_packets) },
  85. { "rx_large_packets", IBMVETH_STAT_OFF(rx_large_packets) },
  86. { "fw_enabled_large_send", IBMVETH_STAT_OFF(fw_large_send_support) }
  87. };
  88. /* simple methods of getting data from the current rxq entry */
  89. static inline u32 ibmveth_rxq_flags(struct ibmveth_adapter *adapter)
  90. {
  91. return be32_to_cpu(adapter->rx_queue.queue_addr[adapter->rx_queue.index].flags_off);
  92. }
  93. static inline int ibmveth_rxq_toggle(struct ibmveth_adapter *adapter)
  94. {
  95. return (ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_TOGGLE) >>
  96. IBMVETH_RXQ_TOGGLE_SHIFT;
  97. }
  98. static inline int ibmveth_rxq_pending_buffer(struct ibmveth_adapter *adapter)
  99. {
  100. return ibmveth_rxq_toggle(adapter) == adapter->rx_queue.toggle;
  101. }
  102. static inline int ibmveth_rxq_buffer_valid(struct ibmveth_adapter *adapter)
  103. {
  104. return ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_VALID;
  105. }
  106. static inline int ibmveth_rxq_frame_offset(struct ibmveth_adapter *adapter)
  107. {
  108. return ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_OFF_MASK;
  109. }
  110. static inline int ibmveth_rxq_large_packet(struct ibmveth_adapter *adapter)
  111. {
  112. return ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_LRG_PKT;
  113. }
  114. static inline int ibmveth_rxq_frame_length(struct ibmveth_adapter *adapter)
  115. {
  116. return be32_to_cpu(adapter->rx_queue.queue_addr[adapter->rx_queue.index].length);
  117. }
  118. static inline int ibmveth_rxq_csum_good(struct ibmveth_adapter *adapter)
  119. {
  120. return ibmveth_rxq_flags(adapter) & IBMVETH_RXQ_CSUM_GOOD;
  121. }
  122. static unsigned int ibmveth_real_max_tx_queues(void)
  123. {
  124. unsigned int n_cpu = num_online_cpus();
  125. return min(n_cpu, IBMVETH_MAX_QUEUES);
  126. }
  127. /* setup the initial settings for a buffer pool */
  128. static void ibmveth_init_buffer_pool(struct ibmveth_buff_pool *pool,
  129. u32 pool_index, u32 pool_size,
  130. u32 buff_size, u32 pool_active)
  131. {
  132. pool->size = pool_size;
  133. pool->index = pool_index;
  134. pool->buff_size = buff_size;
  135. pool->threshold = pool_size * 7 / 8;
  136. pool->active = pool_active;
  137. }
  138. /* allocate and setup an buffer pool - called during open */
  139. static int ibmveth_alloc_buffer_pool(struct ibmveth_buff_pool *pool)
  140. {
  141. int i;
  142. pool->free_map = kmalloc_array(pool->size, sizeof(u16), GFP_KERNEL);
  143. if (!pool->free_map)
  144. return -1;
  145. pool->dma_addr = kcalloc(pool->size, sizeof(dma_addr_t), GFP_KERNEL);
  146. if (!pool->dma_addr) {
  147. kfree(pool->free_map);
  148. pool->free_map = NULL;
  149. return -1;
  150. }
  151. pool->skbuff = kcalloc(pool->size, sizeof(void *), GFP_KERNEL);
  152. if (!pool->skbuff) {
  153. kfree(pool->dma_addr);
  154. pool->dma_addr = NULL;
  155. kfree(pool->free_map);
  156. pool->free_map = NULL;
  157. return -1;
  158. }
  159. for (i = 0; i < pool->size; ++i)
  160. pool->free_map[i] = i;
  161. atomic_set(&pool->available, 0);
  162. pool->producer_index = 0;
  163. pool->consumer_index = 0;
  164. return 0;
  165. }
  166. static inline void ibmveth_flush_buffer(void *addr, unsigned long length)
  167. {
  168. unsigned long offset;
  169. for (offset = 0; offset < length; offset += SMP_CACHE_BYTES)
  170. asm("dcbf %0,%1,1" :: "b" (addr), "r" (offset));
  171. }
  172. /* replenish the buffers for a pool. note that we don't need to
  173. * skb_reserve these since they are used for incoming...
  174. */
  175. static void ibmveth_replenish_buffer_pool(struct ibmveth_adapter *adapter,
  176. struct ibmveth_buff_pool *pool)
  177. {
  178. u32 i;
  179. u32 count = pool->size - atomic_read(&pool->available);
  180. u32 buffers_added = 0;
  181. struct sk_buff *skb;
  182. unsigned int free_index, index;
  183. u64 correlator;
  184. unsigned long lpar_rc;
  185. dma_addr_t dma_addr;
  186. mb();
  187. for (i = 0; i < count; ++i) {
  188. union ibmveth_buf_desc desc;
  189. free_index = pool->consumer_index;
  190. index = pool->free_map[free_index];
  191. skb = NULL;
  192. BUG_ON(index == IBM_VETH_INVALID_MAP);
  193. /* are we allocating a new buffer or recycling an old one */
  194. if (pool->skbuff[index])
  195. goto reuse;
  196. skb = netdev_alloc_skb(adapter->netdev, pool->buff_size);
  197. if (!skb) {
  198. netdev_dbg(adapter->netdev,
  199. "replenish: unable to allocate skb\n");
  200. adapter->replenish_no_mem++;
  201. break;
  202. }
  203. dma_addr = dma_map_single(&adapter->vdev->dev, skb->data,
  204. pool->buff_size, DMA_FROM_DEVICE);
  205. if (dma_mapping_error(&adapter->vdev->dev, dma_addr))
  206. goto failure;
  207. pool->dma_addr[index] = dma_addr;
  208. pool->skbuff[index] = skb;
  209. if (rx_flush) {
  210. unsigned int len = min(pool->buff_size,
  211. adapter->netdev->mtu +
  212. IBMVETH_BUFF_OH);
  213. ibmveth_flush_buffer(skb->data, len);
  214. }
  215. reuse:
  216. dma_addr = pool->dma_addr[index];
  217. desc.fields.flags_len = IBMVETH_BUF_VALID | pool->buff_size;
  218. desc.fields.address = dma_addr;
  219. correlator = ((u64)pool->index << 32) | index;
  220. *(u64 *)pool->skbuff[index]->data = correlator;
  221. lpar_rc = h_add_logical_lan_buffer(adapter->vdev->unit_address,
  222. desc.desc);
  223. if (lpar_rc != H_SUCCESS) {
  224. netdev_warn(adapter->netdev,
  225. "%sadd_logical_lan failed %lu\n",
  226. skb ? "" : "When recycling: ", lpar_rc);
  227. goto failure;
  228. }
  229. pool->free_map[free_index] = IBM_VETH_INVALID_MAP;
  230. pool->consumer_index++;
  231. if (pool->consumer_index >= pool->size)
  232. pool->consumer_index = 0;
  233. buffers_added++;
  234. adapter->replenish_add_buff_success++;
  235. }
  236. mb();
  237. atomic_add(buffers_added, &(pool->available));
  238. return;
  239. failure:
  240. if (dma_addr && !dma_mapping_error(&adapter->vdev->dev, dma_addr))
  241. dma_unmap_single(&adapter->vdev->dev,
  242. pool->dma_addr[index], pool->buff_size,
  243. DMA_FROM_DEVICE);
  244. dev_kfree_skb_any(pool->skbuff[index]);
  245. pool->skbuff[index] = NULL;
  246. adapter->replenish_add_buff_failure++;
  247. mb();
  248. atomic_add(buffers_added, &(pool->available));
  249. }
  250. /*
  251. * The final 8 bytes of the buffer list is a counter of frames dropped
  252. * because there was not a buffer in the buffer list capable of holding
  253. * the frame.
  254. */
  255. static void ibmveth_update_rx_no_buffer(struct ibmveth_adapter *adapter)
  256. {
  257. __be64 *p = adapter->buffer_list_addr + 4096 - 8;
  258. adapter->rx_no_buffer = be64_to_cpup(p);
  259. }
  260. /* replenish routine */
  261. static void ibmveth_replenish_task(struct ibmveth_adapter *adapter)
  262. {
  263. int i;
  264. adapter->replenish_task_cycles++;
  265. for (i = (IBMVETH_NUM_BUFF_POOLS - 1); i >= 0; i--) {
  266. struct ibmveth_buff_pool *pool = &adapter->rx_buff_pool[i];
  267. if (pool->active &&
  268. (atomic_read(&pool->available) < pool->threshold))
  269. ibmveth_replenish_buffer_pool(adapter, pool);
  270. }
  271. ibmveth_update_rx_no_buffer(adapter);
  272. }
  273. /* empty and free ana buffer pool - also used to do cleanup in error paths */
  274. static void ibmveth_free_buffer_pool(struct ibmveth_adapter *adapter,
  275. struct ibmveth_buff_pool *pool)
  276. {
  277. int i;
  278. kfree(pool->free_map);
  279. pool->free_map = NULL;
  280. if (pool->skbuff && pool->dma_addr) {
  281. for (i = 0; i < pool->size; ++i) {
  282. struct sk_buff *skb = pool->skbuff[i];
  283. if (skb) {
  284. dma_unmap_single(&adapter->vdev->dev,
  285. pool->dma_addr[i],
  286. pool->buff_size,
  287. DMA_FROM_DEVICE);
  288. dev_kfree_skb_any(skb);
  289. pool->skbuff[i] = NULL;
  290. }
  291. }
  292. }
  293. if (pool->dma_addr) {
  294. kfree(pool->dma_addr);
  295. pool->dma_addr = NULL;
  296. }
  297. if (pool->skbuff) {
  298. kfree(pool->skbuff);
  299. pool->skbuff = NULL;
  300. }
  301. }
  302. /* remove a buffer from a pool */
  303. static void ibmveth_remove_buffer_from_pool(struct ibmveth_adapter *adapter,
  304. u64 correlator, bool reuse)
  305. {
  306. unsigned int pool = correlator >> 32;
  307. unsigned int index = correlator & 0xffffffffUL;
  308. unsigned int free_index;
  309. struct sk_buff *skb;
  310. BUG_ON(pool >= IBMVETH_NUM_BUFF_POOLS);
  311. BUG_ON(index >= adapter->rx_buff_pool[pool].size);
  312. skb = adapter->rx_buff_pool[pool].skbuff[index];
  313. BUG_ON(skb == NULL);
  314. /* if we are going to reuse the buffer then keep the pointers around
  315. * but mark index as available. replenish will see the skb pointer and
  316. * assume it is to be recycled.
  317. */
  318. if (!reuse) {
  319. /* remove the skb pointer to mark free. actual freeing is done
  320. * by upper level networking after gro_recieve
  321. */
  322. adapter->rx_buff_pool[pool].skbuff[index] = NULL;
  323. dma_unmap_single(&adapter->vdev->dev,
  324. adapter->rx_buff_pool[pool].dma_addr[index],
  325. adapter->rx_buff_pool[pool].buff_size,
  326. DMA_FROM_DEVICE);
  327. }
  328. free_index = adapter->rx_buff_pool[pool].producer_index;
  329. adapter->rx_buff_pool[pool].producer_index++;
  330. if (adapter->rx_buff_pool[pool].producer_index >=
  331. adapter->rx_buff_pool[pool].size)
  332. adapter->rx_buff_pool[pool].producer_index = 0;
  333. adapter->rx_buff_pool[pool].free_map[free_index] = index;
  334. mb();
  335. atomic_dec(&(adapter->rx_buff_pool[pool].available));
  336. }
  337. /* get the current buffer on the rx queue */
  338. static inline struct sk_buff *ibmveth_rxq_get_buffer(struct ibmveth_adapter *adapter)
  339. {
  340. u64 correlator = adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator;
  341. unsigned int pool = correlator >> 32;
  342. unsigned int index = correlator & 0xffffffffUL;
  343. BUG_ON(pool >= IBMVETH_NUM_BUFF_POOLS);
  344. BUG_ON(index >= adapter->rx_buff_pool[pool].size);
  345. return adapter->rx_buff_pool[pool].skbuff[index];
  346. }
  347. static void ibmveth_rxq_harvest_buffer(struct ibmveth_adapter *adapter,
  348. bool reuse)
  349. {
  350. u64 cor;
  351. cor = adapter->rx_queue.queue_addr[adapter->rx_queue.index].correlator;
  352. ibmveth_remove_buffer_from_pool(adapter, cor, reuse);
  353. if (++adapter->rx_queue.index == adapter->rx_queue.num_slots) {
  354. adapter->rx_queue.index = 0;
  355. adapter->rx_queue.toggle = !adapter->rx_queue.toggle;
  356. }
  357. }
  358. static void ibmveth_free_tx_ltb(struct ibmveth_adapter *adapter, int idx)
  359. {
  360. dma_unmap_single(&adapter->vdev->dev, adapter->tx_ltb_dma[idx],
  361. adapter->tx_ltb_size, DMA_TO_DEVICE);
  362. kfree(adapter->tx_ltb_ptr[idx]);
  363. adapter->tx_ltb_ptr[idx] = NULL;
  364. }
  365. static int ibmveth_allocate_tx_ltb(struct ibmveth_adapter *adapter, int idx)
  366. {
  367. adapter->tx_ltb_ptr[idx] = kzalloc(adapter->tx_ltb_size,
  368. GFP_KERNEL);
  369. if (!adapter->tx_ltb_ptr[idx]) {
  370. netdev_err(adapter->netdev,
  371. "unable to allocate tx long term buffer\n");
  372. return -ENOMEM;
  373. }
  374. adapter->tx_ltb_dma[idx] = dma_map_single(&adapter->vdev->dev,
  375. adapter->tx_ltb_ptr[idx],
  376. adapter->tx_ltb_size,
  377. DMA_TO_DEVICE);
  378. if (dma_mapping_error(&adapter->vdev->dev, adapter->tx_ltb_dma[idx])) {
  379. netdev_err(adapter->netdev,
  380. "unable to DMA map tx long term buffer\n");
  381. kfree(adapter->tx_ltb_ptr[idx]);
  382. adapter->tx_ltb_ptr[idx] = NULL;
  383. return -ENOMEM;
  384. }
  385. return 0;
  386. }
  387. static int ibmveth_register_logical_lan(struct ibmveth_adapter *adapter,
  388. union ibmveth_buf_desc rxq_desc, u64 mac_address)
  389. {
  390. int rc, try_again = 1;
  391. /*
  392. * After a kexec the adapter will still be open, so our attempt to
  393. * open it will fail. So if we get a failure we free the adapter and
  394. * try again, but only once.
  395. */
  396. retry:
  397. rc = h_register_logical_lan(adapter->vdev->unit_address,
  398. adapter->buffer_list_dma, rxq_desc.desc,
  399. adapter->filter_list_dma, mac_address);
  400. if (rc != H_SUCCESS && try_again) {
  401. do {
  402. rc = h_free_logical_lan(adapter->vdev->unit_address);
  403. } while (H_IS_LONG_BUSY(rc) || (rc == H_BUSY));
  404. try_again = 0;
  405. goto retry;
  406. }
  407. return rc;
  408. }
  409. static int ibmveth_open(struct net_device *netdev)
  410. {
  411. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  412. u64 mac_address;
  413. int rxq_entries = 1;
  414. unsigned long lpar_rc;
  415. int rc;
  416. union ibmveth_buf_desc rxq_desc;
  417. int i;
  418. struct device *dev;
  419. netdev_dbg(netdev, "open starting\n");
  420. napi_enable(&adapter->napi);
  421. for(i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++)
  422. rxq_entries += adapter->rx_buff_pool[i].size;
  423. rc = -ENOMEM;
  424. adapter->buffer_list_addr = (void*) get_zeroed_page(GFP_KERNEL);
  425. if (!adapter->buffer_list_addr) {
  426. netdev_err(netdev, "unable to allocate list pages\n");
  427. goto out;
  428. }
  429. adapter->filter_list_addr = (void*) get_zeroed_page(GFP_KERNEL);
  430. if (!adapter->filter_list_addr) {
  431. netdev_err(netdev, "unable to allocate filter pages\n");
  432. goto out_free_buffer_list;
  433. }
  434. dev = &adapter->vdev->dev;
  435. adapter->rx_queue.queue_len = sizeof(struct ibmveth_rx_q_entry) *
  436. rxq_entries;
  437. adapter->rx_queue.queue_addr =
  438. dma_alloc_coherent(dev, adapter->rx_queue.queue_len,
  439. &adapter->rx_queue.queue_dma, GFP_KERNEL);
  440. if (!adapter->rx_queue.queue_addr)
  441. goto out_free_filter_list;
  442. adapter->buffer_list_dma = dma_map_single(dev,
  443. adapter->buffer_list_addr, 4096, DMA_BIDIRECTIONAL);
  444. if (dma_mapping_error(dev, adapter->buffer_list_dma)) {
  445. netdev_err(netdev, "unable to map buffer list pages\n");
  446. goto out_free_queue_mem;
  447. }
  448. adapter->filter_list_dma = dma_map_single(dev,
  449. adapter->filter_list_addr, 4096, DMA_BIDIRECTIONAL);
  450. if (dma_mapping_error(dev, adapter->filter_list_dma)) {
  451. netdev_err(netdev, "unable to map filter list pages\n");
  452. goto out_unmap_buffer_list;
  453. }
  454. for (i = 0; i < netdev->real_num_tx_queues; i++) {
  455. if (ibmveth_allocate_tx_ltb(adapter, i))
  456. goto out_free_tx_ltb;
  457. }
  458. adapter->rx_queue.index = 0;
  459. adapter->rx_queue.num_slots = rxq_entries;
  460. adapter->rx_queue.toggle = 1;
  461. mac_address = ether_addr_to_u64(netdev->dev_addr);
  462. rxq_desc.fields.flags_len = IBMVETH_BUF_VALID |
  463. adapter->rx_queue.queue_len;
  464. rxq_desc.fields.address = adapter->rx_queue.queue_dma;
  465. netdev_dbg(netdev, "buffer list @ 0x%p\n", adapter->buffer_list_addr);
  466. netdev_dbg(netdev, "filter list @ 0x%p\n", adapter->filter_list_addr);
  467. netdev_dbg(netdev, "receive q @ 0x%p\n", adapter->rx_queue.queue_addr);
  468. h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE);
  469. lpar_rc = ibmveth_register_logical_lan(adapter, rxq_desc, mac_address);
  470. if (lpar_rc != H_SUCCESS) {
  471. netdev_err(netdev, "h_register_logical_lan failed with %ld\n",
  472. lpar_rc);
  473. netdev_err(netdev, "buffer TCE:0x%llx filter TCE:0x%llx rxq "
  474. "desc:0x%llx MAC:0x%llx\n",
  475. adapter->buffer_list_dma,
  476. adapter->filter_list_dma,
  477. rxq_desc.desc,
  478. mac_address);
  479. rc = -ENONET;
  480. goto out_unmap_filter_list;
  481. }
  482. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {
  483. if (!adapter->rx_buff_pool[i].active)
  484. continue;
  485. if (ibmveth_alloc_buffer_pool(&adapter->rx_buff_pool[i])) {
  486. netdev_err(netdev, "unable to alloc pool\n");
  487. adapter->rx_buff_pool[i].active = 0;
  488. rc = -ENOMEM;
  489. goto out_free_buffer_pools;
  490. }
  491. }
  492. netdev_dbg(netdev, "registering irq 0x%x\n", netdev->irq);
  493. rc = request_irq(netdev->irq, ibmveth_interrupt, 0, netdev->name,
  494. netdev);
  495. if (rc != 0) {
  496. netdev_err(netdev, "unable to request irq 0x%x, rc %d\n",
  497. netdev->irq, rc);
  498. do {
  499. lpar_rc = h_free_logical_lan(adapter->vdev->unit_address);
  500. } while (H_IS_LONG_BUSY(lpar_rc) || (lpar_rc == H_BUSY));
  501. goto out_free_buffer_pools;
  502. }
  503. rc = -ENOMEM;
  504. netdev_dbg(netdev, "initial replenish cycle\n");
  505. ibmveth_interrupt(netdev->irq, netdev);
  506. netif_tx_start_all_queues(netdev);
  507. netdev_dbg(netdev, "open complete\n");
  508. return 0;
  509. out_free_buffer_pools:
  510. while (--i >= 0) {
  511. if (adapter->rx_buff_pool[i].active)
  512. ibmveth_free_buffer_pool(adapter,
  513. &adapter->rx_buff_pool[i]);
  514. }
  515. out_unmap_filter_list:
  516. dma_unmap_single(dev, adapter->filter_list_dma, 4096,
  517. DMA_BIDIRECTIONAL);
  518. out_free_tx_ltb:
  519. while (--i >= 0) {
  520. ibmveth_free_tx_ltb(adapter, i);
  521. }
  522. out_unmap_buffer_list:
  523. dma_unmap_single(dev, adapter->buffer_list_dma, 4096,
  524. DMA_BIDIRECTIONAL);
  525. out_free_queue_mem:
  526. dma_free_coherent(dev, adapter->rx_queue.queue_len,
  527. adapter->rx_queue.queue_addr,
  528. adapter->rx_queue.queue_dma);
  529. out_free_filter_list:
  530. free_page((unsigned long)adapter->filter_list_addr);
  531. out_free_buffer_list:
  532. free_page((unsigned long)adapter->buffer_list_addr);
  533. out:
  534. napi_disable(&adapter->napi);
  535. return rc;
  536. }
  537. static int ibmveth_close(struct net_device *netdev)
  538. {
  539. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  540. struct device *dev = &adapter->vdev->dev;
  541. long lpar_rc;
  542. int i;
  543. netdev_dbg(netdev, "close starting\n");
  544. napi_disable(&adapter->napi);
  545. netif_tx_stop_all_queues(netdev);
  546. h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_DISABLE);
  547. do {
  548. lpar_rc = h_free_logical_lan(adapter->vdev->unit_address);
  549. } while (H_IS_LONG_BUSY(lpar_rc) || (lpar_rc == H_BUSY));
  550. if (lpar_rc != H_SUCCESS) {
  551. netdev_err(netdev, "h_free_logical_lan failed with %lx, "
  552. "continuing with close\n", lpar_rc);
  553. }
  554. free_irq(netdev->irq, netdev);
  555. ibmveth_update_rx_no_buffer(adapter);
  556. dma_unmap_single(dev, adapter->buffer_list_dma, 4096,
  557. DMA_BIDIRECTIONAL);
  558. free_page((unsigned long)adapter->buffer_list_addr);
  559. dma_unmap_single(dev, adapter->filter_list_dma, 4096,
  560. DMA_BIDIRECTIONAL);
  561. free_page((unsigned long)adapter->filter_list_addr);
  562. dma_free_coherent(dev, adapter->rx_queue.queue_len,
  563. adapter->rx_queue.queue_addr,
  564. adapter->rx_queue.queue_dma);
  565. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++)
  566. if (adapter->rx_buff_pool[i].active)
  567. ibmveth_free_buffer_pool(adapter,
  568. &adapter->rx_buff_pool[i]);
  569. for (i = 0; i < netdev->real_num_tx_queues; i++)
  570. ibmveth_free_tx_ltb(adapter, i);
  571. netdev_dbg(netdev, "close complete\n");
  572. return 0;
  573. }
  574. static int ibmveth_set_link_ksettings(struct net_device *dev,
  575. const struct ethtool_link_ksettings *cmd)
  576. {
  577. struct ibmveth_adapter *adapter = netdev_priv(dev);
  578. return ethtool_virtdev_set_link_ksettings(dev, cmd,
  579. &adapter->speed,
  580. &adapter->duplex);
  581. }
  582. static int ibmveth_get_link_ksettings(struct net_device *dev,
  583. struct ethtool_link_ksettings *cmd)
  584. {
  585. struct ibmveth_adapter *adapter = netdev_priv(dev);
  586. cmd->base.speed = adapter->speed;
  587. cmd->base.duplex = adapter->duplex;
  588. cmd->base.port = PORT_OTHER;
  589. return 0;
  590. }
  591. static void ibmveth_init_link_settings(struct net_device *dev)
  592. {
  593. struct ibmveth_adapter *adapter = netdev_priv(dev);
  594. adapter->speed = SPEED_1000;
  595. adapter->duplex = DUPLEX_FULL;
  596. }
  597. static void netdev_get_drvinfo(struct net_device *dev,
  598. struct ethtool_drvinfo *info)
  599. {
  600. strscpy(info->driver, ibmveth_driver_name, sizeof(info->driver));
  601. strscpy(info->version, ibmveth_driver_version, sizeof(info->version));
  602. }
  603. static netdev_features_t ibmveth_fix_features(struct net_device *dev,
  604. netdev_features_t features)
  605. {
  606. /*
  607. * Since the ibmveth firmware interface does not have the
  608. * concept of separate tx/rx checksum offload enable, if rx
  609. * checksum is disabled we also have to disable tx checksum
  610. * offload. Once we disable rx checksum offload, we are no
  611. * longer allowed to send tx buffers that are not properly
  612. * checksummed.
  613. */
  614. if (!(features & NETIF_F_RXCSUM))
  615. features &= ~NETIF_F_CSUM_MASK;
  616. return features;
  617. }
  618. static int ibmveth_set_csum_offload(struct net_device *dev, u32 data)
  619. {
  620. struct ibmveth_adapter *adapter = netdev_priv(dev);
  621. unsigned long set_attr, clr_attr, ret_attr;
  622. unsigned long set_attr6, clr_attr6;
  623. long ret, ret4, ret6;
  624. int rc1 = 0, rc2 = 0;
  625. int restart = 0;
  626. if (netif_running(dev)) {
  627. restart = 1;
  628. ibmveth_close(dev);
  629. }
  630. set_attr = 0;
  631. clr_attr = 0;
  632. set_attr6 = 0;
  633. clr_attr6 = 0;
  634. if (data) {
  635. set_attr = IBMVETH_ILLAN_IPV4_TCP_CSUM;
  636. set_attr6 = IBMVETH_ILLAN_IPV6_TCP_CSUM;
  637. } else {
  638. clr_attr = IBMVETH_ILLAN_IPV4_TCP_CSUM;
  639. clr_attr6 = IBMVETH_ILLAN_IPV6_TCP_CSUM;
  640. }
  641. ret = h_illan_attributes(adapter->vdev->unit_address, 0, 0, &ret_attr);
  642. if (ret == H_SUCCESS &&
  643. (ret_attr & IBMVETH_ILLAN_PADDED_PKT_CSUM)) {
  644. ret4 = h_illan_attributes(adapter->vdev->unit_address, clr_attr,
  645. set_attr, &ret_attr);
  646. if (ret4 != H_SUCCESS) {
  647. netdev_err(dev, "unable to change IPv4 checksum "
  648. "offload settings. %d rc=%ld\n",
  649. data, ret4);
  650. h_illan_attributes(adapter->vdev->unit_address,
  651. set_attr, clr_attr, &ret_attr);
  652. if (data == 1)
  653. dev->features &= ~NETIF_F_IP_CSUM;
  654. } else {
  655. adapter->fw_ipv4_csum_support = data;
  656. }
  657. ret6 = h_illan_attributes(adapter->vdev->unit_address,
  658. clr_attr6, set_attr6, &ret_attr);
  659. if (ret6 != H_SUCCESS) {
  660. netdev_err(dev, "unable to change IPv6 checksum "
  661. "offload settings. %d rc=%ld\n",
  662. data, ret6);
  663. h_illan_attributes(adapter->vdev->unit_address,
  664. set_attr6, clr_attr6, &ret_attr);
  665. if (data == 1)
  666. dev->features &= ~NETIF_F_IPV6_CSUM;
  667. } else
  668. adapter->fw_ipv6_csum_support = data;
  669. if (ret4 == H_SUCCESS || ret6 == H_SUCCESS)
  670. adapter->rx_csum = data;
  671. else
  672. rc1 = -EIO;
  673. } else {
  674. rc1 = -EIO;
  675. netdev_err(dev, "unable to change checksum offload settings."
  676. " %d rc=%ld ret_attr=%lx\n", data, ret,
  677. ret_attr);
  678. }
  679. if (restart)
  680. rc2 = ibmveth_open(dev);
  681. return rc1 ? rc1 : rc2;
  682. }
  683. static int ibmveth_set_tso(struct net_device *dev, u32 data)
  684. {
  685. struct ibmveth_adapter *adapter = netdev_priv(dev);
  686. unsigned long set_attr, clr_attr, ret_attr;
  687. long ret1, ret2;
  688. int rc1 = 0, rc2 = 0;
  689. int restart = 0;
  690. if (netif_running(dev)) {
  691. restart = 1;
  692. ibmveth_close(dev);
  693. }
  694. set_attr = 0;
  695. clr_attr = 0;
  696. if (data)
  697. set_attr = IBMVETH_ILLAN_LRG_SR_ENABLED;
  698. else
  699. clr_attr = IBMVETH_ILLAN_LRG_SR_ENABLED;
  700. ret1 = h_illan_attributes(adapter->vdev->unit_address, 0, 0, &ret_attr);
  701. if (ret1 == H_SUCCESS && (ret_attr & IBMVETH_ILLAN_LRG_SND_SUPPORT) &&
  702. !old_large_send) {
  703. ret2 = h_illan_attributes(adapter->vdev->unit_address, clr_attr,
  704. set_attr, &ret_attr);
  705. if (ret2 != H_SUCCESS) {
  706. netdev_err(dev, "unable to change tso settings. %d rc=%ld\n",
  707. data, ret2);
  708. h_illan_attributes(adapter->vdev->unit_address,
  709. set_attr, clr_attr, &ret_attr);
  710. if (data == 1)
  711. dev->features &= ~(NETIF_F_TSO | NETIF_F_TSO6);
  712. rc1 = -EIO;
  713. } else {
  714. adapter->fw_large_send_support = data;
  715. adapter->large_send = data;
  716. }
  717. } else {
  718. /* Older firmware version of large send offload does not
  719. * support tcp6/ipv6
  720. */
  721. if (data == 1) {
  722. dev->features &= ~NETIF_F_TSO6;
  723. netdev_info(dev, "TSO feature requires all partitions to have updated driver");
  724. }
  725. adapter->large_send = data;
  726. }
  727. if (restart)
  728. rc2 = ibmveth_open(dev);
  729. return rc1 ? rc1 : rc2;
  730. }
  731. static int ibmveth_set_features(struct net_device *dev,
  732. netdev_features_t features)
  733. {
  734. struct ibmveth_adapter *adapter = netdev_priv(dev);
  735. int rx_csum = !!(features & NETIF_F_RXCSUM);
  736. int large_send = !!(features & (NETIF_F_TSO | NETIF_F_TSO6));
  737. int rc1 = 0, rc2 = 0;
  738. if (rx_csum != adapter->rx_csum) {
  739. rc1 = ibmveth_set_csum_offload(dev, rx_csum);
  740. if (rc1 && !adapter->rx_csum)
  741. dev->features =
  742. features & ~(NETIF_F_CSUM_MASK |
  743. NETIF_F_RXCSUM);
  744. }
  745. if (large_send != adapter->large_send) {
  746. rc2 = ibmveth_set_tso(dev, large_send);
  747. if (rc2 && !adapter->large_send)
  748. dev->features =
  749. features & ~(NETIF_F_TSO | NETIF_F_TSO6);
  750. }
  751. return rc1 ? rc1 : rc2;
  752. }
  753. static void ibmveth_get_strings(struct net_device *dev, u32 stringset, u8 *data)
  754. {
  755. int i;
  756. if (stringset != ETH_SS_STATS)
  757. return;
  758. for (i = 0; i < ARRAY_SIZE(ibmveth_stats); i++, data += ETH_GSTRING_LEN)
  759. memcpy(data, ibmveth_stats[i].name, ETH_GSTRING_LEN);
  760. }
  761. static int ibmveth_get_sset_count(struct net_device *dev, int sset)
  762. {
  763. switch (sset) {
  764. case ETH_SS_STATS:
  765. return ARRAY_SIZE(ibmveth_stats);
  766. default:
  767. return -EOPNOTSUPP;
  768. }
  769. }
  770. static void ibmveth_get_ethtool_stats(struct net_device *dev,
  771. struct ethtool_stats *stats, u64 *data)
  772. {
  773. int i;
  774. struct ibmveth_adapter *adapter = netdev_priv(dev);
  775. for (i = 0; i < ARRAY_SIZE(ibmveth_stats); i++)
  776. data[i] = IBMVETH_GET_STAT(adapter, ibmveth_stats[i].offset);
  777. }
  778. static void ibmveth_get_channels(struct net_device *netdev,
  779. struct ethtool_channels *channels)
  780. {
  781. channels->max_tx = ibmveth_real_max_tx_queues();
  782. channels->tx_count = netdev->real_num_tx_queues;
  783. channels->max_rx = netdev->real_num_rx_queues;
  784. channels->rx_count = netdev->real_num_rx_queues;
  785. }
  786. static int ibmveth_set_channels(struct net_device *netdev,
  787. struct ethtool_channels *channels)
  788. {
  789. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  790. unsigned int old = netdev->real_num_tx_queues,
  791. goal = channels->tx_count;
  792. int rc, i;
  793. /* If ndo_open has not been called yet then don't allocate, just set
  794. * desired netdev_queue's and return
  795. */
  796. if (!(netdev->flags & IFF_UP))
  797. return netif_set_real_num_tx_queues(netdev, goal);
  798. /* We have IBMVETH_MAX_QUEUES netdev_queue's allocated
  799. * but we may need to alloc/free the ltb's.
  800. */
  801. netif_tx_stop_all_queues(netdev);
  802. /* Allocate any queue that we need */
  803. for (i = old; i < goal; i++) {
  804. if (adapter->tx_ltb_ptr[i])
  805. continue;
  806. rc = ibmveth_allocate_tx_ltb(adapter, i);
  807. if (!rc)
  808. continue;
  809. /* if something goes wrong, free everything we just allocated */
  810. netdev_err(netdev, "Failed to allocate more tx queues, returning to %d queues\n",
  811. old);
  812. goal = old;
  813. old = i;
  814. break;
  815. }
  816. rc = netif_set_real_num_tx_queues(netdev, goal);
  817. if (rc) {
  818. netdev_err(netdev, "Failed to set real tx queues, returning to %d queues\n",
  819. old);
  820. goal = old;
  821. old = i;
  822. }
  823. /* Free any that are no longer needed */
  824. for (i = old; i > goal; i--) {
  825. if (adapter->tx_ltb_ptr[i - 1])
  826. ibmveth_free_tx_ltb(adapter, i - 1);
  827. }
  828. netif_tx_wake_all_queues(netdev);
  829. return rc;
  830. }
  831. static const struct ethtool_ops netdev_ethtool_ops = {
  832. .get_drvinfo = netdev_get_drvinfo,
  833. .get_link = ethtool_op_get_link,
  834. .get_strings = ibmveth_get_strings,
  835. .get_sset_count = ibmveth_get_sset_count,
  836. .get_ethtool_stats = ibmveth_get_ethtool_stats,
  837. .get_link_ksettings = ibmveth_get_link_ksettings,
  838. .set_link_ksettings = ibmveth_set_link_ksettings,
  839. .get_channels = ibmveth_get_channels,
  840. .set_channels = ibmveth_set_channels
  841. };
  842. static int ibmveth_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
  843. {
  844. return -EOPNOTSUPP;
  845. }
  846. static int ibmveth_send(struct ibmveth_adapter *adapter,
  847. unsigned long desc, unsigned long mss)
  848. {
  849. unsigned long correlator;
  850. unsigned int retry_count;
  851. unsigned long ret;
  852. /*
  853. * The retry count sets a maximum for the number of broadcast and
  854. * multicast destinations within the system.
  855. */
  856. retry_count = 1024;
  857. correlator = 0;
  858. do {
  859. ret = h_send_logical_lan(adapter->vdev->unit_address, desc,
  860. correlator, &correlator, mss,
  861. adapter->fw_large_send_support);
  862. } while ((ret == H_BUSY) && (retry_count--));
  863. if (ret != H_SUCCESS && ret != H_DROPPED) {
  864. netdev_err(adapter->netdev, "tx: h_send_logical_lan failed "
  865. "with rc=%ld\n", ret);
  866. return 1;
  867. }
  868. return 0;
  869. }
  870. static int ibmveth_is_packet_unsupported(struct sk_buff *skb,
  871. struct net_device *netdev)
  872. {
  873. struct ethhdr *ether_header;
  874. int ret = 0;
  875. ether_header = eth_hdr(skb);
  876. if (ether_addr_equal(ether_header->h_dest, netdev->dev_addr)) {
  877. netdev_dbg(netdev, "veth doesn't support loopback packets, dropping packet.\n");
  878. netdev->stats.tx_dropped++;
  879. ret = -EOPNOTSUPP;
  880. }
  881. return ret;
  882. }
  883. static netdev_tx_t ibmveth_start_xmit(struct sk_buff *skb,
  884. struct net_device *netdev)
  885. {
  886. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  887. unsigned int desc_flags, total_bytes;
  888. union ibmveth_buf_desc desc;
  889. int i, queue_num = skb_get_queue_mapping(skb);
  890. unsigned long mss = 0;
  891. if (ibmveth_is_packet_unsupported(skb, netdev))
  892. goto out;
  893. /* veth can't checksum offload UDP */
  894. if (skb->ip_summed == CHECKSUM_PARTIAL &&
  895. ((skb->protocol == htons(ETH_P_IP) &&
  896. ip_hdr(skb)->protocol != IPPROTO_TCP) ||
  897. (skb->protocol == htons(ETH_P_IPV6) &&
  898. ipv6_hdr(skb)->nexthdr != IPPROTO_TCP)) &&
  899. skb_checksum_help(skb)) {
  900. netdev_err(netdev, "tx: failed to checksum packet\n");
  901. netdev->stats.tx_dropped++;
  902. goto out;
  903. }
  904. desc_flags = IBMVETH_BUF_VALID;
  905. if (skb->ip_summed == CHECKSUM_PARTIAL) {
  906. unsigned char *buf = skb_transport_header(skb) +
  907. skb->csum_offset;
  908. desc_flags |= (IBMVETH_BUF_NO_CSUM | IBMVETH_BUF_CSUM_GOOD);
  909. /* Need to zero out the checksum */
  910. buf[0] = 0;
  911. buf[1] = 0;
  912. if (skb_is_gso(skb) && adapter->fw_large_send_support)
  913. desc_flags |= IBMVETH_BUF_LRG_SND;
  914. }
  915. if (skb->ip_summed == CHECKSUM_PARTIAL && skb_is_gso(skb)) {
  916. if (adapter->fw_large_send_support) {
  917. mss = (unsigned long)skb_shinfo(skb)->gso_size;
  918. adapter->tx_large_packets++;
  919. } else if (!skb_is_gso_v6(skb)) {
  920. /* Put -1 in the IP checksum to tell phyp it
  921. * is a largesend packet. Put the mss in
  922. * the TCP checksum.
  923. */
  924. ip_hdr(skb)->check = 0xffff;
  925. tcp_hdr(skb)->check =
  926. cpu_to_be16(skb_shinfo(skb)->gso_size);
  927. adapter->tx_large_packets++;
  928. }
  929. }
  930. /* Copy header into mapped buffer */
  931. if (unlikely(skb->len > adapter->tx_ltb_size)) {
  932. netdev_err(adapter->netdev, "tx: packet size (%u) exceeds ltb (%u)\n",
  933. skb->len, adapter->tx_ltb_size);
  934. netdev->stats.tx_dropped++;
  935. goto out;
  936. }
  937. memcpy(adapter->tx_ltb_ptr[queue_num], skb->data, skb_headlen(skb));
  938. total_bytes = skb_headlen(skb);
  939. /* Copy frags into mapped buffers */
  940. for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
  941. const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
  942. memcpy(adapter->tx_ltb_ptr[queue_num] + total_bytes,
  943. skb_frag_address_safe(frag), skb_frag_size(frag));
  944. total_bytes += skb_frag_size(frag);
  945. }
  946. if (unlikely(total_bytes != skb->len)) {
  947. netdev_err(adapter->netdev, "tx: incorrect packet len copied into ltb (%u != %u)\n",
  948. skb->len, total_bytes);
  949. netdev->stats.tx_dropped++;
  950. goto out;
  951. }
  952. desc.fields.flags_len = desc_flags | skb->len;
  953. desc.fields.address = adapter->tx_ltb_dma[queue_num];
  954. /* finish writing to long_term_buff before VIOS accessing it */
  955. dma_wmb();
  956. if (ibmveth_send(adapter, desc.desc, mss)) {
  957. adapter->tx_send_failed++;
  958. netdev->stats.tx_dropped++;
  959. } else {
  960. netdev->stats.tx_packets++;
  961. netdev->stats.tx_bytes += skb->len;
  962. }
  963. out:
  964. dev_consume_skb_any(skb);
  965. return NETDEV_TX_OK;
  966. }
  967. static void ibmveth_rx_mss_helper(struct sk_buff *skb, u16 mss, int lrg_pkt)
  968. {
  969. struct tcphdr *tcph;
  970. int offset = 0;
  971. int hdr_len;
  972. /* only TCP packets will be aggregated */
  973. if (skb->protocol == htons(ETH_P_IP)) {
  974. struct iphdr *iph = (struct iphdr *)skb->data;
  975. if (iph->protocol == IPPROTO_TCP) {
  976. offset = iph->ihl * 4;
  977. skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
  978. } else {
  979. return;
  980. }
  981. } else if (skb->protocol == htons(ETH_P_IPV6)) {
  982. struct ipv6hdr *iph6 = (struct ipv6hdr *)skb->data;
  983. if (iph6->nexthdr == IPPROTO_TCP) {
  984. offset = sizeof(struct ipv6hdr);
  985. skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
  986. } else {
  987. return;
  988. }
  989. } else {
  990. return;
  991. }
  992. /* if mss is not set through Large Packet bit/mss in rx buffer,
  993. * expect that the mss will be written to the tcp header checksum.
  994. */
  995. tcph = (struct tcphdr *)(skb->data + offset);
  996. if (lrg_pkt) {
  997. skb_shinfo(skb)->gso_size = mss;
  998. } else if (offset) {
  999. skb_shinfo(skb)->gso_size = ntohs(tcph->check);
  1000. tcph->check = 0;
  1001. }
  1002. if (skb_shinfo(skb)->gso_size) {
  1003. hdr_len = offset + tcph->doff * 4;
  1004. skb_shinfo(skb)->gso_segs =
  1005. DIV_ROUND_UP(skb->len - hdr_len,
  1006. skb_shinfo(skb)->gso_size);
  1007. }
  1008. }
  1009. static void ibmveth_rx_csum_helper(struct sk_buff *skb,
  1010. struct ibmveth_adapter *adapter)
  1011. {
  1012. struct iphdr *iph = NULL;
  1013. struct ipv6hdr *iph6 = NULL;
  1014. __be16 skb_proto = 0;
  1015. u16 iphlen = 0;
  1016. u16 iph_proto = 0;
  1017. u16 tcphdrlen = 0;
  1018. skb_proto = be16_to_cpu(skb->protocol);
  1019. if (skb_proto == ETH_P_IP) {
  1020. iph = (struct iphdr *)skb->data;
  1021. /* If the IP checksum is not offloaded and if the packet
  1022. * is large send, the checksum must be rebuilt.
  1023. */
  1024. if (iph->check == 0xffff) {
  1025. iph->check = 0;
  1026. iph->check = ip_fast_csum((unsigned char *)iph,
  1027. iph->ihl);
  1028. }
  1029. iphlen = iph->ihl * 4;
  1030. iph_proto = iph->protocol;
  1031. } else if (skb_proto == ETH_P_IPV6) {
  1032. iph6 = (struct ipv6hdr *)skb->data;
  1033. iphlen = sizeof(struct ipv6hdr);
  1034. iph_proto = iph6->nexthdr;
  1035. }
  1036. /* When CSO is enabled the TCP checksum may have be set to NULL by
  1037. * the sender given that we zeroed out TCP checksum field in
  1038. * transmit path (refer ibmveth_start_xmit routine). In this case set
  1039. * up CHECKSUM_PARTIAL. If the packet is forwarded, the checksum will
  1040. * then be recalculated by the destination NIC (CSO must be enabled
  1041. * on the destination NIC).
  1042. *
  1043. * In an OVS environment, when a flow is not cached, specifically for a
  1044. * new TCP connection, the first packet information is passed up to
  1045. * the user space for finding a flow. During this process, OVS computes
  1046. * checksum on the first packet when CHECKSUM_PARTIAL flag is set.
  1047. *
  1048. * So, re-compute TCP pseudo header checksum.
  1049. */
  1050. if (iph_proto == IPPROTO_TCP) {
  1051. struct tcphdr *tcph = (struct tcphdr *)(skb->data + iphlen);
  1052. if (tcph->check == 0x0000) {
  1053. /* Recompute TCP pseudo header checksum */
  1054. tcphdrlen = skb->len - iphlen;
  1055. if (skb_proto == ETH_P_IP)
  1056. tcph->check =
  1057. ~csum_tcpudp_magic(iph->saddr,
  1058. iph->daddr, tcphdrlen, iph_proto, 0);
  1059. else if (skb_proto == ETH_P_IPV6)
  1060. tcph->check =
  1061. ~csum_ipv6_magic(&iph6->saddr,
  1062. &iph6->daddr, tcphdrlen, iph_proto, 0);
  1063. /* Setup SKB fields for checksum offload */
  1064. skb_partial_csum_set(skb, iphlen,
  1065. offsetof(struct tcphdr, check));
  1066. skb_reset_network_header(skb);
  1067. }
  1068. }
  1069. }
  1070. static int ibmveth_poll(struct napi_struct *napi, int budget)
  1071. {
  1072. struct ibmveth_adapter *adapter =
  1073. container_of(napi, struct ibmveth_adapter, napi);
  1074. struct net_device *netdev = adapter->netdev;
  1075. int frames_processed = 0;
  1076. unsigned long lpar_rc;
  1077. u16 mss = 0;
  1078. restart_poll:
  1079. while (frames_processed < budget) {
  1080. if (!ibmveth_rxq_pending_buffer(adapter))
  1081. break;
  1082. smp_rmb();
  1083. if (!ibmveth_rxq_buffer_valid(adapter)) {
  1084. wmb(); /* suggested by larson1 */
  1085. adapter->rx_invalid_buffer++;
  1086. netdev_dbg(netdev, "recycling invalid buffer\n");
  1087. ibmveth_rxq_harvest_buffer(adapter, true);
  1088. } else {
  1089. struct sk_buff *skb, *new_skb;
  1090. int length = ibmveth_rxq_frame_length(adapter);
  1091. int offset = ibmveth_rxq_frame_offset(adapter);
  1092. int csum_good = ibmveth_rxq_csum_good(adapter);
  1093. int lrg_pkt = ibmveth_rxq_large_packet(adapter);
  1094. __sum16 iph_check = 0;
  1095. skb = ibmveth_rxq_get_buffer(adapter);
  1096. /* if the large packet bit is set in the rx queue
  1097. * descriptor, the mss will be written by PHYP eight
  1098. * bytes from the start of the rx buffer, which is
  1099. * skb->data at this stage
  1100. */
  1101. if (lrg_pkt) {
  1102. __be64 *rxmss = (__be64 *)(skb->data + 8);
  1103. mss = (u16)be64_to_cpu(*rxmss);
  1104. }
  1105. new_skb = NULL;
  1106. if (length < rx_copybreak)
  1107. new_skb = netdev_alloc_skb(netdev, length);
  1108. if (new_skb) {
  1109. skb_copy_to_linear_data(new_skb,
  1110. skb->data + offset,
  1111. length);
  1112. if (rx_flush)
  1113. ibmveth_flush_buffer(skb->data,
  1114. length + offset);
  1115. ibmveth_rxq_harvest_buffer(adapter, true);
  1116. skb = new_skb;
  1117. } else {
  1118. ibmveth_rxq_harvest_buffer(adapter, false);
  1119. skb_reserve(skb, offset);
  1120. }
  1121. skb_put(skb, length);
  1122. skb->protocol = eth_type_trans(skb, netdev);
  1123. /* PHYP without PLSO support places a -1 in the ip
  1124. * checksum for large send frames.
  1125. */
  1126. if (skb->protocol == cpu_to_be16(ETH_P_IP)) {
  1127. struct iphdr *iph = (struct iphdr *)skb->data;
  1128. iph_check = iph->check;
  1129. }
  1130. if ((length > netdev->mtu + ETH_HLEN) ||
  1131. lrg_pkt || iph_check == 0xffff) {
  1132. ibmveth_rx_mss_helper(skb, mss, lrg_pkt);
  1133. adapter->rx_large_packets++;
  1134. }
  1135. if (csum_good) {
  1136. skb->ip_summed = CHECKSUM_UNNECESSARY;
  1137. ibmveth_rx_csum_helper(skb, adapter);
  1138. }
  1139. napi_gro_receive(napi, skb); /* send it up */
  1140. netdev->stats.rx_packets++;
  1141. netdev->stats.rx_bytes += length;
  1142. frames_processed++;
  1143. }
  1144. }
  1145. ibmveth_replenish_task(adapter);
  1146. if (frames_processed == budget)
  1147. goto out;
  1148. if (!napi_complete_done(napi, frames_processed))
  1149. goto out;
  1150. /* We think we are done - reenable interrupts,
  1151. * then check once more to make sure we are done.
  1152. */
  1153. lpar_rc = h_vio_signal(adapter->vdev->unit_address, VIO_IRQ_ENABLE);
  1154. BUG_ON(lpar_rc != H_SUCCESS);
  1155. if (ibmveth_rxq_pending_buffer(adapter) && napi_schedule(napi)) {
  1156. lpar_rc = h_vio_signal(adapter->vdev->unit_address,
  1157. VIO_IRQ_DISABLE);
  1158. goto restart_poll;
  1159. }
  1160. out:
  1161. return frames_processed;
  1162. }
  1163. static irqreturn_t ibmveth_interrupt(int irq, void *dev_instance)
  1164. {
  1165. struct net_device *netdev = dev_instance;
  1166. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  1167. unsigned long lpar_rc;
  1168. if (napi_schedule_prep(&adapter->napi)) {
  1169. lpar_rc = h_vio_signal(adapter->vdev->unit_address,
  1170. VIO_IRQ_DISABLE);
  1171. BUG_ON(lpar_rc != H_SUCCESS);
  1172. __napi_schedule(&adapter->napi);
  1173. }
  1174. return IRQ_HANDLED;
  1175. }
  1176. static void ibmveth_set_multicast_list(struct net_device *netdev)
  1177. {
  1178. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  1179. unsigned long lpar_rc;
  1180. if ((netdev->flags & IFF_PROMISC) ||
  1181. (netdev_mc_count(netdev) > adapter->mcastFilterSize)) {
  1182. lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
  1183. IbmVethMcastEnableRecv |
  1184. IbmVethMcastDisableFiltering,
  1185. 0);
  1186. if (lpar_rc != H_SUCCESS) {
  1187. netdev_err(netdev, "h_multicast_ctrl rc=%ld when "
  1188. "entering promisc mode\n", lpar_rc);
  1189. }
  1190. } else {
  1191. struct netdev_hw_addr *ha;
  1192. /* clear the filter table & disable filtering */
  1193. lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
  1194. IbmVethMcastEnableRecv |
  1195. IbmVethMcastDisableFiltering |
  1196. IbmVethMcastClearFilterTable,
  1197. 0);
  1198. if (lpar_rc != H_SUCCESS) {
  1199. netdev_err(netdev, "h_multicast_ctrl rc=%ld when "
  1200. "attempting to clear filter table\n",
  1201. lpar_rc);
  1202. }
  1203. /* add the addresses to the filter table */
  1204. netdev_for_each_mc_addr(ha, netdev) {
  1205. /* add the multicast address to the filter table */
  1206. u64 mcast_addr;
  1207. mcast_addr = ether_addr_to_u64(ha->addr);
  1208. lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
  1209. IbmVethMcastAddFilter,
  1210. mcast_addr);
  1211. if (lpar_rc != H_SUCCESS) {
  1212. netdev_err(netdev, "h_multicast_ctrl rc=%ld "
  1213. "when adding an entry to the filter "
  1214. "table\n", lpar_rc);
  1215. }
  1216. }
  1217. /* re-enable filtering */
  1218. lpar_rc = h_multicast_ctrl(adapter->vdev->unit_address,
  1219. IbmVethMcastEnableFiltering,
  1220. 0);
  1221. if (lpar_rc != H_SUCCESS) {
  1222. netdev_err(netdev, "h_multicast_ctrl rc=%ld when "
  1223. "enabling filtering\n", lpar_rc);
  1224. }
  1225. }
  1226. }
  1227. static int ibmveth_change_mtu(struct net_device *dev, int new_mtu)
  1228. {
  1229. struct ibmveth_adapter *adapter = netdev_priv(dev);
  1230. struct vio_dev *viodev = adapter->vdev;
  1231. int new_mtu_oh = new_mtu + IBMVETH_BUFF_OH;
  1232. int i, rc;
  1233. int need_restart = 0;
  1234. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++)
  1235. if (new_mtu_oh <= adapter->rx_buff_pool[i].buff_size)
  1236. break;
  1237. if (i == IBMVETH_NUM_BUFF_POOLS)
  1238. return -EINVAL;
  1239. /* Deactivate all the buffer pools so that the next loop can activate
  1240. only the buffer pools necessary to hold the new MTU */
  1241. if (netif_running(adapter->netdev)) {
  1242. need_restart = 1;
  1243. ibmveth_close(adapter->netdev);
  1244. }
  1245. /* Look for an active buffer pool that can hold the new MTU */
  1246. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {
  1247. adapter->rx_buff_pool[i].active = 1;
  1248. if (new_mtu_oh <= adapter->rx_buff_pool[i].buff_size) {
  1249. WRITE_ONCE(dev->mtu, new_mtu);
  1250. vio_cmo_set_dev_desired(viodev,
  1251. ibmveth_get_desired_dma
  1252. (viodev));
  1253. if (need_restart) {
  1254. return ibmveth_open(adapter->netdev);
  1255. }
  1256. return 0;
  1257. }
  1258. }
  1259. if (need_restart && (rc = ibmveth_open(adapter->netdev)))
  1260. return rc;
  1261. return -EINVAL;
  1262. }
  1263. #ifdef CONFIG_NET_POLL_CONTROLLER
  1264. static void ibmveth_poll_controller(struct net_device *dev)
  1265. {
  1266. ibmveth_replenish_task(netdev_priv(dev));
  1267. ibmveth_interrupt(dev->irq, dev);
  1268. }
  1269. #endif
  1270. /**
  1271. * ibmveth_get_desired_dma - Calculate IO memory desired by the driver
  1272. *
  1273. * @vdev: struct vio_dev for the device whose desired IO mem is to be returned
  1274. *
  1275. * Return value:
  1276. * Number of bytes of IO data the driver will need to perform well.
  1277. */
  1278. static unsigned long ibmveth_get_desired_dma(struct vio_dev *vdev)
  1279. {
  1280. struct net_device *netdev = dev_get_drvdata(&vdev->dev);
  1281. struct ibmveth_adapter *adapter;
  1282. struct iommu_table *tbl;
  1283. unsigned long ret;
  1284. int i;
  1285. int rxqentries = 1;
  1286. tbl = get_iommu_table_base(&vdev->dev);
  1287. /* netdev inits at probe time along with the structures we need below*/
  1288. if (netdev == NULL)
  1289. return IOMMU_PAGE_ALIGN(IBMVETH_IO_ENTITLEMENT_DEFAULT, tbl);
  1290. adapter = netdev_priv(netdev);
  1291. ret = IBMVETH_BUFF_LIST_SIZE + IBMVETH_FILT_LIST_SIZE;
  1292. ret += IOMMU_PAGE_ALIGN(netdev->mtu, tbl);
  1293. /* add size of mapped tx buffers */
  1294. ret += IOMMU_PAGE_ALIGN(IBMVETH_MAX_TX_BUF_SIZE, tbl);
  1295. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {
  1296. /* add the size of the active receive buffers */
  1297. if (adapter->rx_buff_pool[i].active)
  1298. ret +=
  1299. adapter->rx_buff_pool[i].size *
  1300. IOMMU_PAGE_ALIGN(adapter->rx_buff_pool[i].
  1301. buff_size, tbl);
  1302. rxqentries += adapter->rx_buff_pool[i].size;
  1303. }
  1304. /* add the size of the receive queue entries */
  1305. ret += IOMMU_PAGE_ALIGN(
  1306. rxqentries * sizeof(struct ibmveth_rx_q_entry), tbl);
  1307. return ret;
  1308. }
  1309. static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
  1310. {
  1311. struct ibmveth_adapter *adapter = netdev_priv(dev);
  1312. struct sockaddr *addr = p;
  1313. u64 mac_address;
  1314. int rc;
  1315. if (!is_valid_ether_addr(addr->sa_data))
  1316. return -EADDRNOTAVAIL;
  1317. mac_address = ether_addr_to_u64(addr->sa_data);
  1318. rc = h_change_logical_lan_mac(adapter->vdev->unit_address, mac_address);
  1319. if (rc) {
  1320. netdev_err(adapter->netdev, "h_change_logical_lan_mac failed with rc=%d\n", rc);
  1321. return rc;
  1322. }
  1323. eth_hw_addr_set(dev, addr->sa_data);
  1324. return 0;
  1325. }
  1326. static const struct net_device_ops ibmveth_netdev_ops = {
  1327. .ndo_open = ibmveth_open,
  1328. .ndo_stop = ibmveth_close,
  1329. .ndo_start_xmit = ibmveth_start_xmit,
  1330. .ndo_set_rx_mode = ibmveth_set_multicast_list,
  1331. .ndo_eth_ioctl = ibmveth_ioctl,
  1332. .ndo_change_mtu = ibmveth_change_mtu,
  1333. .ndo_fix_features = ibmveth_fix_features,
  1334. .ndo_set_features = ibmveth_set_features,
  1335. .ndo_validate_addr = eth_validate_addr,
  1336. .ndo_set_mac_address = ibmveth_set_mac_addr,
  1337. #ifdef CONFIG_NET_POLL_CONTROLLER
  1338. .ndo_poll_controller = ibmveth_poll_controller,
  1339. #endif
  1340. };
  1341. static int ibmveth_probe(struct vio_dev *dev, const struct vio_device_id *id)
  1342. {
  1343. int rc, i, mac_len;
  1344. struct net_device *netdev;
  1345. struct ibmveth_adapter *adapter;
  1346. unsigned char *mac_addr_p;
  1347. __be32 *mcastFilterSize_p;
  1348. long ret;
  1349. unsigned long ret_attr;
  1350. dev_dbg(&dev->dev, "entering ibmveth_probe for UA 0x%x\n",
  1351. dev->unit_address);
  1352. mac_addr_p = (unsigned char *)vio_get_attribute(dev, VETH_MAC_ADDR,
  1353. &mac_len);
  1354. if (!mac_addr_p) {
  1355. dev_err(&dev->dev, "Can't find VETH_MAC_ADDR attribute\n");
  1356. return -EINVAL;
  1357. }
  1358. /* Workaround for old/broken pHyp */
  1359. if (mac_len == 8)
  1360. mac_addr_p += 2;
  1361. else if (mac_len != 6) {
  1362. dev_err(&dev->dev, "VETH_MAC_ADDR attribute wrong len %d\n",
  1363. mac_len);
  1364. return -EINVAL;
  1365. }
  1366. mcastFilterSize_p = (__be32 *)vio_get_attribute(dev,
  1367. VETH_MCAST_FILTER_SIZE,
  1368. NULL);
  1369. if (!mcastFilterSize_p) {
  1370. dev_err(&dev->dev, "Can't find VETH_MCAST_FILTER_SIZE "
  1371. "attribute\n");
  1372. return -EINVAL;
  1373. }
  1374. netdev = alloc_etherdev_mqs(sizeof(struct ibmveth_adapter), IBMVETH_MAX_QUEUES, 1);
  1375. if (!netdev)
  1376. return -ENOMEM;
  1377. adapter = netdev_priv(netdev);
  1378. dev_set_drvdata(&dev->dev, netdev);
  1379. adapter->vdev = dev;
  1380. adapter->netdev = netdev;
  1381. adapter->mcastFilterSize = be32_to_cpu(*mcastFilterSize_p);
  1382. ibmveth_init_link_settings(netdev);
  1383. netif_napi_add_weight(netdev, &adapter->napi, ibmveth_poll, 16);
  1384. netdev->irq = dev->irq;
  1385. netdev->netdev_ops = &ibmveth_netdev_ops;
  1386. netdev->ethtool_ops = &netdev_ethtool_ops;
  1387. SET_NETDEV_DEV(netdev, &dev->dev);
  1388. netdev->hw_features = NETIF_F_SG;
  1389. if (vio_get_attribute(dev, "ibm,illan-options", NULL) != NULL) {
  1390. netdev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
  1391. NETIF_F_RXCSUM;
  1392. }
  1393. netdev->features |= netdev->hw_features;
  1394. ret = h_illan_attributes(adapter->vdev->unit_address, 0, 0, &ret_attr);
  1395. /* If running older firmware, TSO should not be enabled by default */
  1396. if (ret == H_SUCCESS && (ret_attr & IBMVETH_ILLAN_LRG_SND_SUPPORT) &&
  1397. !old_large_send) {
  1398. netdev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
  1399. netdev->features |= netdev->hw_features;
  1400. } else {
  1401. netdev->hw_features |= NETIF_F_TSO;
  1402. }
  1403. adapter->is_active_trunk = false;
  1404. if (ret == H_SUCCESS && (ret_attr & IBMVETH_ILLAN_ACTIVE_TRUNK)) {
  1405. adapter->is_active_trunk = true;
  1406. netdev->hw_features |= NETIF_F_FRAGLIST;
  1407. netdev->features |= NETIF_F_FRAGLIST;
  1408. }
  1409. netdev->min_mtu = IBMVETH_MIN_MTU;
  1410. netdev->max_mtu = ETH_MAX_MTU - IBMVETH_BUFF_OH;
  1411. eth_hw_addr_set(netdev, mac_addr_p);
  1412. if (firmware_has_feature(FW_FEATURE_CMO))
  1413. memcpy(pool_count, pool_count_cmo, sizeof(pool_count));
  1414. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {
  1415. struct kobject *kobj = &adapter->rx_buff_pool[i].kobj;
  1416. int error;
  1417. ibmveth_init_buffer_pool(&adapter->rx_buff_pool[i], i,
  1418. pool_count[i], pool_size[i],
  1419. pool_active[i]);
  1420. error = kobject_init_and_add(kobj, &ktype_veth_pool,
  1421. &dev->dev.kobj, "pool%d", i);
  1422. if (!error)
  1423. kobject_uevent(kobj, KOBJ_ADD);
  1424. }
  1425. rc = netif_set_real_num_tx_queues(netdev, min(num_online_cpus(),
  1426. IBMVETH_DEFAULT_QUEUES));
  1427. if (rc) {
  1428. netdev_dbg(netdev, "failed to set number of tx queues rc=%d\n",
  1429. rc);
  1430. free_netdev(netdev);
  1431. return rc;
  1432. }
  1433. adapter->tx_ltb_size = PAGE_ALIGN(IBMVETH_MAX_TX_BUF_SIZE);
  1434. for (i = 0; i < IBMVETH_MAX_QUEUES; i++)
  1435. adapter->tx_ltb_ptr[i] = NULL;
  1436. netdev_dbg(netdev, "adapter @ 0x%p\n", adapter);
  1437. netdev_dbg(netdev, "registering netdev...\n");
  1438. ibmveth_set_features(netdev, netdev->features);
  1439. rc = register_netdev(netdev);
  1440. if (rc) {
  1441. netdev_dbg(netdev, "failed to register netdev rc=%d\n", rc);
  1442. free_netdev(netdev);
  1443. return rc;
  1444. }
  1445. netdev_dbg(netdev, "registered\n");
  1446. return 0;
  1447. }
  1448. static void ibmveth_remove(struct vio_dev *dev)
  1449. {
  1450. struct net_device *netdev = dev_get_drvdata(&dev->dev);
  1451. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  1452. int i;
  1453. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++)
  1454. kobject_put(&adapter->rx_buff_pool[i].kobj);
  1455. unregister_netdev(netdev);
  1456. free_netdev(netdev);
  1457. dev_set_drvdata(&dev->dev, NULL);
  1458. }
  1459. static struct attribute veth_active_attr;
  1460. static struct attribute veth_num_attr;
  1461. static struct attribute veth_size_attr;
  1462. static ssize_t veth_pool_show(struct kobject *kobj,
  1463. struct attribute *attr, char *buf)
  1464. {
  1465. struct ibmveth_buff_pool *pool = container_of(kobj,
  1466. struct ibmveth_buff_pool,
  1467. kobj);
  1468. if (attr == &veth_active_attr)
  1469. return sprintf(buf, "%d\n", pool->active);
  1470. else if (attr == &veth_num_attr)
  1471. return sprintf(buf, "%d\n", pool->size);
  1472. else if (attr == &veth_size_attr)
  1473. return sprintf(buf, "%d\n", pool->buff_size);
  1474. return 0;
  1475. }
  1476. static ssize_t veth_pool_store(struct kobject *kobj, struct attribute *attr,
  1477. const char *buf, size_t count)
  1478. {
  1479. struct ibmveth_buff_pool *pool = container_of(kobj,
  1480. struct ibmveth_buff_pool,
  1481. kobj);
  1482. struct net_device *netdev = dev_get_drvdata(kobj_to_dev(kobj->parent));
  1483. struct ibmveth_adapter *adapter = netdev_priv(netdev);
  1484. long value = simple_strtol(buf, NULL, 10);
  1485. long rc;
  1486. rtnl_lock();
  1487. if (attr == &veth_active_attr) {
  1488. if (value && !pool->active) {
  1489. if (netif_running(netdev)) {
  1490. if (ibmveth_alloc_buffer_pool(pool)) {
  1491. netdev_err(netdev,
  1492. "unable to alloc pool\n");
  1493. rc = -ENOMEM;
  1494. goto unlock_err;
  1495. }
  1496. pool->active = 1;
  1497. ibmveth_close(netdev);
  1498. rc = ibmveth_open(netdev);
  1499. if (rc)
  1500. goto unlock_err;
  1501. } else {
  1502. pool->active = 1;
  1503. }
  1504. } else if (!value && pool->active) {
  1505. int mtu = netdev->mtu + IBMVETH_BUFF_OH;
  1506. int i;
  1507. /* Make sure there is a buffer pool with buffers that
  1508. can hold a packet of the size of the MTU */
  1509. for (i = 0; i < IBMVETH_NUM_BUFF_POOLS; i++) {
  1510. if (pool == &adapter->rx_buff_pool[i])
  1511. continue;
  1512. if (!adapter->rx_buff_pool[i].active)
  1513. continue;
  1514. if (mtu <= adapter->rx_buff_pool[i].buff_size)
  1515. break;
  1516. }
  1517. if (i == IBMVETH_NUM_BUFF_POOLS) {
  1518. netdev_err(netdev, "no active pool >= MTU\n");
  1519. rc = -EPERM;
  1520. goto unlock_err;
  1521. }
  1522. if (netif_running(netdev)) {
  1523. ibmveth_close(netdev);
  1524. pool->active = 0;
  1525. rc = ibmveth_open(netdev);
  1526. if (rc)
  1527. goto unlock_err;
  1528. }
  1529. pool->active = 0;
  1530. }
  1531. } else if (attr == &veth_num_attr) {
  1532. if (value <= 0 || value > IBMVETH_MAX_POOL_COUNT) {
  1533. rc = -EINVAL;
  1534. goto unlock_err;
  1535. } else {
  1536. if (netif_running(netdev)) {
  1537. ibmveth_close(netdev);
  1538. pool->size = value;
  1539. rc = ibmveth_open(netdev);
  1540. if (rc)
  1541. goto unlock_err;
  1542. } else {
  1543. pool->size = value;
  1544. }
  1545. }
  1546. } else if (attr == &veth_size_attr) {
  1547. if (value <= IBMVETH_BUFF_OH || value > IBMVETH_MAX_BUF_SIZE) {
  1548. rc = -EINVAL;
  1549. goto unlock_err;
  1550. } else {
  1551. if (netif_running(netdev)) {
  1552. ibmveth_close(netdev);
  1553. pool->buff_size = value;
  1554. rc = ibmveth_open(netdev);
  1555. if (rc)
  1556. goto unlock_err;
  1557. } else {
  1558. pool->buff_size = value;
  1559. }
  1560. }
  1561. }
  1562. rtnl_unlock();
  1563. /* kick the interrupt handler to allocate/deallocate pools */
  1564. ibmveth_interrupt(netdev->irq, netdev);
  1565. return count;
  1566. unlock_err:
  1567. rtnl_unlock();
  1568. return rc;
  1569. }
  1570. #define ATTR(_name, _mode) \
  1571. struct attribute veth_##_name##_attr = { \
  1572. .name = __stringify(_name), .mode = _mode, \
  1573. };
  1574. static ATTR(active, 0644);
  1575. static ATTR(num, 0644);
  1576. static ATTR(size, 0644);
  1577. static struct attribute *veth_pool_attrs[] = {
  1578. &veth_active_attr,
  1579. &veth_num_attr,
  1580. &veth_size_attr,
  1581. NULL,
  1582. };
  1583. ATTRIBUTE_GROUPS(veth_pool);
  1584. static const struct sysfs_ops veth_pool_ops = {
  1585. .show = veth_pool_show,
  1586. .store = veth_pool_store,
  1587. };
  1588. static struct kobj_type ktype_veth_pool = {
  1589. .release = NULL,
  1590. .sysfs_ops = &veth_pool_ops,
  1591. .default_groups = veth_pool_groups,
  1592. };
  1593. static int ibmveth_resume(struct device *dev)
  1594. {
  1595. struct net_device *netdev = dev_get_drvdata(dev);
  1596. ibmveth_interrupt(netdev->irq, netdev);
  1597. return 0;
  1598. }
  1599. static const struct vio_device_id ibmveth_device_table[] = {
  1600. { "network", "IBM,l-lan"},
  1601. { "", "" }
  1602. };
  1603. MODULE_DEVICE_TABLE(vio, ibmveth_device_table);
  1604. static const struct dev_pm_ops ibmveth_pm_ops = {
  1605. .resume = ibmveth_resume
  1606. };
  1607. static struct vio_driver ibmveth_driver = {
  1608. .id_table = ibmveth_device_table,
  1609. .probe = ibmveth_probe,
  1610. .remove = ibmveth_remove,
  1611. .get_desired_dma = ibmveth_get_desired_dma,
  1612. .name = ibmveth_driver_name,
  1613. .pm = &ibmveth_pm_ops,
  1614. };
  1615. static int __init ibmveth_module_init(void)
  1616. {
  1617. printk(KERN_DEBUG "%s: %s %s\n", ibmveth_driver_name,
  1618. ibmveth_driver_string, ibmveth_driver_version);
  1619. return vio_register_driver(&ibmveth_driver);
  1620. }
  1621. static void __exit ibmveth_module_exit(void)
  1622. {
  1623. vio_unregister_driver(&ibmveth_driver);
  1624. }
  1625. module_init(ibmveth_module_init);
  1626. module_exit(ibmveth_module_exit);