qeth_core.h 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright IBM Corp. 2007
  4. * Author(s): Utz Bacher <utz.bacher@de.ibm.com>,
  5. * Frank Pavlic <fpavlic@de.ibm.com>,
  6. * Thomas Spatzier <tspat@de.ibm.com>,
  7. * Frank Blaschka <frank.blaschka@de.ibm.com>
  8. */
  9. #ifndef __QETH_CORE_H__
  10. #define __QETH_CORE_H__
  11. #include <linux/completion.h>
  12. #include <linux/debugfs.h>
  13. #include <linux/if.h>
  14. #include <linux/if_arp.h>
  15. #include <linux/etherdevice.h>
  16. #include <linux/if_vlan.h>
  17. #include <linux/ctype.h>
  18. #include <linux/in6.h>
  19. #include <linux/bitops.h>
  20. #include <linux/seq_file.h>
  21. #include <linux/hashtable.h>
  22. #include <linux/ip.h>
  23. #include <linux/rcupdate.h>
  24. #include <linux/refcount.h>
  25. #include <linux/timer.h>
  26. #include <linux/types.h>
  27. #include <linux/wait.h>
  28. #include <linux/workqueue.h>
  29. #include <net/dst.h>
  30. #include <net/ip6_fib.h>
  31. #include <net/ipv6.h>
  32. #include <net/if_inet6.h>
  33. #include <net/addrconf.h>
  34. #include <net/route.h>
  35. #include <net/sch_generic.h>
  36. #include <net/tcp.h>
  37. #include <asm/debug.h>
  38. #include <asm/qdio.h>
  39. #include <asm/ccwdev.h>
  40. #include <asm/ccwgroup.h>
  41. #include <asm/sysinfo.h>
  42. #include <uapi/linux/if_link.h>
  43. #include "qeth_core_mpc.h"
  44. /**
  45. * Debug Facility stuff
  46. */
  47. enum qeth_dbf_names {
  48. QETH_DBF_SETUP,
  49. QETH_DBF_MSG,
  50. QETH_DBF_CTRL,
  51. QETH_DBF_INFOS /* must be last element */
  52. };
  53. struct qeth_dbf_info {
  54. char name[DEBUG_MAX_NAME_LEN];
  55. int pages;
  56. int areas;
  57. int len;
  58. int level;
  59. struct debug_view *view;
  60. debug_info_t *id;
  61. };
  62. #define QETH_DBF_CTRL_LEN 256U
  63. #define QETH_DBF_TEXT(name, level, text) \
  64. debug_text_event(qeth_dbf[QETH_DBF_##name].id, level, text)
  65. #define QETH_DBF_HEX(name, level, addr, len) \
  66. debug_event(qeth_dbf[QETH_DBF_##name].id, level, (void *)(addr), len)
  67. #define QETH_DBF_MESSAGE(level, text...) \
  68. debug_sprintf_event(qeth_dbf[QETH_DBF_MSG].id, level, text)
  69. #define QETH_DBF_TEXT_(name, level, text...) \
  70. qeth_dbf_longtext(qeth_dbf[QETH_DBF_##name].id, level, text)
  71. #define QETH_CARD_TEXT(card, level, text) \
  72. debug_text_event(card->debug, level, text)
  73. #define QETH_CARD_HEX(card, level, addr, len) \
  74. debug_event(card->debug, level, (void *)(addr), len)
  75. #define QETH_CARD_MESSAGE(card, text...) \
  76. debug_sprintf_event(card->debug, level, text)
  77. #define QETH_CARD_TEXT_(card, level, text...) \
  78. qeth_dbf_longtext(card->debug, level, text)
  79. #define SENSE_COMMAND_REJECT_BYTE 0
  80. #define SENSE_COMMAND_REJECT_FLAG 0x80
  81. #define SENSE_RESETTING_EVENT_BYTE 1
  82. #define SENSE_RESETTING_EVENT_FLAG 0x80
  83. static inline u32 qeth_get_device_id(struct ccw_device *cdev)
  84. {
  85. struct ccw_dev_id dev_id;
  86. u32 id;
  87. ccw_device_get_id(cdev, &dev_id);
  88. id = dev_id.devno;
  89. id |= (u32) (dev_id.ssid << 16);
  90. return id;
  91. }
  92. /*
  93. * Common IO related definitions
  94. */
  95. #define CARD_RDEV(card) card->read.ccwdev
  96. #define CARD_WDEV(card) card->write.ccwdev
  97. #define CARD_DDEV(card) card->data.ccwdev
  98. #define CARD_BUS_ID(card) dev_name(&card->gdev->dev)
  99. #define CARD_RDEV_ID(card) dev_name(&card->read.ccwdev->dev)
  100. #define CARD_WDEV_ID(card) dev_name(&card->write.ccwdev->dev)
  101. #define CARD_DDEV_ID(card) dev_name(&card->data.ccwdev->dev)
  102. #define CCW_DEVID(cdev) (qeth_get_device_id(cdev))
  103. #define CARD_DEVID(card) (CCW_DEVID(CARD_RDEV(card)))
  104. /* Routing stuff */
  105. struct qeth_routing_info {
  106. enum qeth_routing_types type;
  107. };
  108. /* SETBRIDGEPORT stuff */
  109. enum qeth_sbp_roles {
  110. QETH_SBP_ROLE_NONE = 0,
  111. QETH_SBP_ROLE_PRIMARY = 1,
  112. QETH_SBP_ROLE_SECONDARY = 2,
  113. };
  114. enum qeth_sbp_states {
  115. QETH_SBP_STATE_INACTIVE = 0,
  116. QETH_SBP_STATE_STANDBY = 1,
  117. QETH_SBP_STATE_ACTIVE = 2,
  118. };
  119. #define QETH_SBP_HOST_NOTIFICATION 1
  120. struct qeth_sbp_info {
  121. __u32 supported_funcs;
  122. enum qeth_sbp_roles role;
  123. __u32 hostnotification:1;
  124. __u32 reflect_promisc:1;
  125. __u32 reflect_promisc_primary:1;
  126. };
  127. struct qeth_vnicc_info {
  128. /* supported/currently configured VNICCs; updated in IPA exchanges */
  129. u32 sup_chars;
  130. u32 cur_chars;
  131. /* supported commands: bitmasks which VNICCs support respective cmd */
  132. u32 set_char_sup;
  133. u32 getset_timeout_sup;
  134. /* timeout value for the learning characteristic */
  135. u32 learning_timeout;
  136. /* characteristics wanted/configured by user */
  137. u32 wanted_chars;
  138. /* has user explicitly enabled rx_bcast while online? */
  139. bool rx_bcast_enabled;
  140. };
  141. #define QETH_IDX_FUNC_LEVEL_OSD 0x0101
  142. #define QETH_IDX_FUNC_LEVEL_IQD 0x4108
  143. #define QETH_BUFSIZE 4096
  144. #define CCW_CMD_WRITE 0x01
  145. #define CCW_CMD_READ 0x02
  146. /**
  147. * some more defs
  148. */
  149. #define QETH_TX_TIMEOUT (100 * HZ)
  150. #define QETH_RCD_TIMEOUT (60 * HZ)
  151. #define QETH_RECLAIM_WORK_TIME HZ
  152. #define QETH_MAX_PORTNO 15
  153. /*****************************************************************************/
  154. /* QDIO queue and buffer handling */
  155. /*****************************************************************************/
  156. #define QETH_MAX_OUT_QUEUES 4
  157. #define QETH_IQD_MIN_TXQ 2 /* One for ucast, one for mcast. */
  158. #define QETH_IQD_MCAST_TXQ 0
  159. #define QETH_IQD_MIN_UCAST_TXQ 1
  160. #define QETH_MAX_IN_QUEUES 2
  161. #define QETH_RX_COPYBREAK (PAGE_SIZE >> 1)
  162. #define QETH_IN_BUF_SIZE_DEFAULT 65536
  163. #define QETH_IN_BUF_COUNT_DEFAULT 64
  164. #define QETH_IN_BUF_COUNT_HSDEFAULT 128
  165. #define QETH_IN_BUF_COUNT_MIN 8U
  166. #define QETH_IN_BUF_COUNT_MAX 128U
  167. #define QETH_MAX_BUFFER_ELEMENTS(card) ((card)->qdio.in_buf_size >> 12)
  168. #define QETH_IN_BUF_REQUEUE_THRESHOLD(card) \
  169. ((card)->qdio.in_buf_pool.buf_count / 2)
  170. /* buffers we have to be behind before we get a PCI */
  171. #define QETH_PCI_THRESHOLD_A(card) ((card)->qdio.in_buf_pool.buf_count+1)
  172. /*enqueued free buffers left before we get a PCI*/
  173. #define QETH_PCI_THRESHOLD_B(card) 0
  174. /*not used unless the microcode gets patched*/
  175. #define QETH_PCI_TIMER_VALUE(card) 3
  176. /* priority queing */
  177. #define QETH_PRIOQ_DEFAULT QETH_NO_PRIO_QUEUEING
  178. #define QETH_DEFAULT_QUEUE 2
  179. #define QETH_NO_PRIO_QUEUEING 0
  180. #define QETH_PRIO_Q_ING_PREC 1
  181. #define QETH_PRIO_Q_ING_TOS 2
  182. #define QETH_PRIO_Q_ING_SKB 3
  183. #define QETH_PRIO_Q_ING_VLAN 4
  184. #define QETH_PRIO_Q_ING_FIXED 5
  185. /* Packing */
  186. #define QETH_LOW_WATERMARK_PACK 2
  187. #define QETH_HIGH_WATERMARK_PACK 5
  188. #define QETH_WATERMARK_PACK_FUZZ 1
  189. struct qeth_hdr_layer3 {
  190. __u8 id;
  191. __u8 flags;
  192. __u16 inbound_checksum; /*TSO:__u16 seqno */
  193. __u32 token; /*TSO: __u32 reserved */
  194. __u16 length;
  195. __u8 vlan_prio;
  196. __u8 ext_flags;
  197. __u16 vlan_id;
  198. __u16 frame_offset;
  199. union {
  200. /* TX: */
  201. struct in6_addr addr;
  202. /* RX: */
  203. struct rx {
  204. u8 res1[2];
  205. u8 src_mac[6];
  206. u8 res2[4];
  207. u16 vlan_id;
  208. u8 res3[2];
  209. } rx;
  210. } next_hop;
  211. };
  212. struct qeth_hdr_layer2 {
  213. __u8 id;
  214. __u8 flags[3];
  215. __u8 port_no;
  216. __u8 hdr_length;
  217. __u16 pkt_length;
  218. __u16 seq_no;
  219. __u16 vlan_id;
  220. __u32 reserved;
  221. __u8 reserved2[16];
  222. } __attribute__ ((packed));
  223. struct qeth_hdr {
  224. union {
  225. struct qeth_hdr_layer2 l2;
  226. struct qeth_hdr_layer3 l3;
  227. } hdr;
  228. } __attribute__ ((packed));
  229. #define QETH_QIB_PQUE_ORDER_RR 0
  230. #define QETH_QIB_PQUE_UNITS_SBAL 2
  231. #define QETH_QIB_PQUE_PRIO_DEFAULT 4
  232. struct qeth_qib_parms {
  233. char pcit_magic[4];
  234. u32 pcit_a;
  235. u32 pcit_b;
  236. u32 pcit_c;
  237. char blkt_magic[4];
  238. u32 blkt_total;
  239. u32 blkt_inter_packet;
  240. u32 blkt_inter_packet_jumbo;
  241. char pque_magic[4];
  242. u8 pque_order;
  243. u8 pque_units;
  244. u16 reserved;
  245. u32 pque_priority[4];
  246. };
  247. /*TCP Segmentation Offload header*/
  248. struct qeth_hdr_ext_tso {
  249. __u16 hdr_tot_len;
  250. __u8 imb_hdr_no;
  251. __u8 reserved;
  252. __u8 hdr_type;
  253. __u8 hdr_version;
  254. __u16 hdr_len;
  255. __u32 payload_len;
  256. __u16 mss;
  257. __u16 dg_hdr_len;
  258. __u8 padding[16];
  259. } __attribute__ ((packed));
  260. struct qeth_hdr_tso {
  261. struct qeth_hdr hdr; /*hdr->hdr.l3.xxx*/
  262. struct qeth_hdr_ext_tso ext;
  263. } __attribute__ ((packed));
  264. /* flags for qeth_hdr.flags */
  265. #define QETH_HDR_PASSTHRU 0x10
  266. #define QETH_HDR_IPV6 0x80
  267. #define QETH_HDR_CAST_MASK 0x07
  268. enum qeth_cast_flags {
  269. QETH_CAST_UNICAST = 0x06,
  270. QETH_CAST_MULTICAST = 0x04,
  271. QETH_CAST_BROADCAST = 0x05,
  272. QETH_CAST_ANYCAST = 0x07,
  273. QETH_CAST_NOCAST = 0x00,
  274. };
  275. enum qeth_layer2_frame_flags {
  276. QETH_LAYER2_FLAG_MULTICAST = 0x01,
  277. QETH_LAYER2_FLAG_BROADCAST = 0x02,
  278. QETH_LAYER2_FLAG_UNICAST = 0x04,
  279. QETH_LAYER2_FLAG_VLAN = 0x10,
  280. };
  281. enum qeth_header_ids {
  282. QETH_HEADER_TYPE_LAYER3 = 0x01,
  283. QETH_HEADER_TYPE_LAYER2 = 0x02,
  284. QETH_HEADER_TYPE_L3_TSO = 0x03,
  285. QETH_HEADER_TYPE_L2_TSO = 0x06,
  286. QETH_HEADER_MASK_INVAL = 0x80,
  287. };
  288. /* flags for qeth_hdr.ext_flags */
  289. #define QETH_HDR_EXT_VLAN_FRAME 0x01
  290. #define QETH_HDR_EXT_TOKEN_ID 0x02
  291. #define QETH_HDR_EXT_INCLUDE_VLAN_TAG 0x04
  292. #define QETH_HDR_EXT_SRC_MAC_ADDR 0x08
  293. #define QETH_HDR_EXT_CSUM_HDR_REQ 0x10
  294. #define QETH_HDR_EXT_CSUM_TRANSP_REQ 0x20
  295. #define QETH_HDR_EXT_UDP 0x40 /*bit off for TCP*/
  296. static inline bool qeth_l2_same_vlan(struct qeth_hdr_layer2 *h1,
  297. struct qeth_hdr_layer2 *h2)
  298. {
  299. return !((h1->flags[2] ^ h2->flags[2]) & QETH_LAYER2_FLAG_VLAN) &&
  300. h1->vlan_id == h2->vlan_id;
  301. }
  302. static inline bool qeth_l3_iqd_same_vlan(struct qeth_hdr_layer3 *h1,
  303. struct qeth_hdr_layer3 *h2)
  304. {
  305. return !((h1->ext_flags ^ h2->ext_flags) & QETH_HDR_EXT_VLAN_FRAME) &&
  306. h1->vlan_id == h2->vlan_id;
  307. }
  308. static inline bool qeth_l3_same_next_hop(struct qeth_hdr_layer3 *h1,
  309. struct qeth_hdr_layer3 *h2)
  310. {
  311. return !((h1->flags ^ h2->flags) & QETH_HDR_IPV6) &&
  312. ipv6_addr_equal(&h1->next_hop.addr, &h2->next_hop.addr);
  313. }
  314. struct qeth_local_addr {
  315. struct hlist_node hnode;
  316. struct rcu_head rcu;
  317. struct in6_addr addr;
  318. };
  319. enum qeth_qdio_info_states {
  320. QETH_QDIO_UNINITIALIZED,
  321. QETH_QDIO_ALLOCATED,
  322. QETH_QDIO_ESTABLISHED,
  323. QETH_QDIO_CLEANING
  324. };
  325. struct qeth_buffer_pool_entry {
  326. struct list_head list;
  327. struct list_head init_list;
  328. struct page *elements[QDIO_MAX_ELEMENTS_PER_BUFFER];
  329. };
  330. struct qeth_qdio_buffer_pool {
  331. struct list_head entry_list;
  332. int buf_count;
  333. };
  334. struct qeth_qdio_buffer {
  335. struct qdio_buffer *buffer;
  336. /* the buffer pool entry currently associated to this buffer */
  337. struct qeth_buffer_pool_entry *pool_entry;
  338. struct sk_buff *rx_skb;
  339. };
  340. struct qeth_qdio_q {
  341. struct qdio_buffer *qdio_bufs[QDIO_MAX_BUFFERS_PER_Q];
  342. struct qeth_qdio_buffer bufs[QDIO_MAX_BUFFERS_PER_Q];
  343. int next_buf_to_init;
  344. };
  345. enum qeth_qdio_out_buffer_state {
  346. /* Owned by driver, in order to be filled. */
  347. QETH_QDIO_BUF_EMPTY,
  348. /* Filled by driver; owned by hardware in order to be sent. */
  349. QETH_QDIO_BUF_PRIMED,
  350. };
  351. enum qeth_qaob_state {
  352. QETH_QAOB_ISSUED,
  353. QETH_QAOB_PENDING,
  354. QETH_QAOB_DONE,
  355. };
  356. struct qeth_qaob_priv1 {
  357. unsigned int state;
  358. u8 queue_no;
  359. };
  360. struct qeth_qdio_out_buffer {
  361. struct qdio_buffer *buffer;
  362. atomic_t state;
  363. int next_element_to_fill;
  364. unsigned int frames;
  365. unsigned int bytes;
  366. struct sk_buff_head skb_list;
  367. DECLARE_BITMAP(from_kmem_cache, QDIO_MAX_ELEMENTS_PER_BUFFER);
  368. struct list_head list_entry;
  369. struct qaob *aob;
  370. };
  371. struct qeth_card;
  372. #define QETH_CARD_STAT_ADD(_c, _stat, _val) ((_c)->stats._stat += (_val))
  373. #define QETH_CARD_STAT_INC(_c, _stat) QETH_CARD_STAT_ADD(_c, _stat, 1)
  374. #define QETH_TXQ_STAT_ADD(_q, _stat, _val) ((_q)->stats._stat += (_val))
  375. #define QETH_TXQ_STAT_INC(_q, _stat) QETH_TXQ_STAT_ADD(_q, _stat, 1)
  376. struct qeth_card_stats {
  377. u64 rx_bufs;
  378. u64 rx_skb_csum;
  379. u64 rx_sg_skbs;
  380. u64 rx_sg_frags;
  381. u64 rx_sg_alloc_page;
  382. u64 rx_dropped_nomem;
  383. u64 rx_dropped_notsupp;
  384. u64 rx_dropped_runt;
  385. /* rtnl_link_stats64 */
  386. u64 rx_packets;
  387. u64 rx_bytes;
  388. u64 rx_multicast;
  389. u64 rx_length_errors;
  390. u64 rx_frame_errors;
  391. u64 rx_fifo_errors;
  392. };
  393. struct qeth_out_q_stats {
  394. u64 bufs;
  395. u64 bufs_pack;
  396. u64 buf_elements;
  397. u64 skbs_pack;
  398. u64 skbs_sg;
  399. u64 skbs_csum;
  400. u64 skbs_tso;
  401. u64 skbs_linearized;
  402. u64 skbs_linearized_fail;
  403. u64 tso_bytes;
  404. u64 packing_mode_switch;
  405. u64 stopped;
  406. u64 doorbell;
  407. u64 coal_frames;
  408. u64 completion_irq;
  409. u64 completion_yield;
  410. u64 completion_timer;
  411. /* rtnl_link_stats64 */
  412. u64 tx_packets;
  413. u64 tx_bytes;
  414. u64 tx_errors;
  415. u64 tx_dropped;
  416. };
  417. #define QETH_TX_MAX_COALESCED_FRAMES 1
  418. #define QETH_TX_COALESCE_USECS 25
  419. #define QETH_TX_TIMER_USECS 500
  420. struct qeth_qdio_out_q {
  421. struct qdio_buffer *qdio_bufs[QDIO_MAX_BUFFERS_PER_Q];
  422. struct qeth_qdio_out_buffer *bufs[QDIO_MAX_BUFFERS_PER_Q];
  423. struct list_head pending_bufs;
  424. struct qeth_out_q_stats stats;
  425. spinlock_t lock;
  426. unsigned int priority;
  427. u8 next_buf_to_fill;
  428. u8 max_elements;
  429. u8 queue_no;
  430. u8 do_pack;
  431. struct qeth_card *card;
  432. /*
  433. * number of buffers that are currently filled (PRIMED)
  434. * -> these buffers are hardware-owned
  435. */
  436. atomic_t used_buffers;
  437. /* indicates whether PCI flag must be set (or if one is outstanding) */
  438. atomic_t set_pci_flags_count;
  439. struct napi_struct napi;
  440. struct timer_list timer;
  441. struct qeth_hdr *prev_hdr;
  442. unsigned int coalesced_frames;
  443. u8 bulk_start;
  444. u8 bulk_count;
  445. u8 bulk_max;
  446. unsigned int coalesce_usecs;
  447. unsigned int max_coalesced_frames;
  448. unsigned int rescan_usecs;
  449. };
  450. #define qeth_for_each_output_queue(card, q, i) \
  451. for (i = 0; i < card->qdio.no_out_queues && \
  452. (q = card->qdio.out_qs[i]); i++)
  453. #define qeth_napi_to_out_queue(n) container_of(n, struct qeth_qdio_out_q, napi)
  454. static inline void qeth_tx_arm_timer(struct qeth_qdio_out_q *queue,
  455. unsigned long usecs)
  456. {
  457. timer_reduce(&queue->timer, usecs_to_jiffies(usecs) + jiffies);
  458. }
  459. static inline bool qeth_out_queue_is_full(struct qeth_qdio_out_q *queue)
  460. {
  461. return atomic_read(&queue->used_buffers) >= QDIO_MAX_BUFFERS_PER_Q;
  462. }
  463. static inline bool qeth_out_queue_is_empty(struct qeth_qdio_out_q *queue)
  464. {
  465. return atomic_read(&queue->used_buffers) == 0;
  466. }
  467. struct qeth_qdio_info {
  468. atomic_t state;
  469. /* input */
  470. struct qeth_qdio_q *in_q;
  471. struct qeth_qdio_q *c_q;
  472. struct qeth_qdio_buffer_pool in_buf_pool;
  473. struct qeth_qdio_buffer_pool init_pool;
  474. int in_buf_size;
  475. /* output */
  476. unsigned int no_out_queues;
  477. struct qeth_qdio_out_q *out_qs[QETH_MAX_OUT_QUEUES];
  478. /* priority queueing */
  479. int do_prio_queueing;
  480. int default_out_queue;
  481. };
  482. /**
  483. * channel state machine
  484. */
  485. enum qeth_channel_states {
  486. CH_STATE_UP,
  487. CH_STATE_DOWN,
  488. CH_STATE_HALTED,
  489. CH_STATE_STOPPED,
  490. };
  491. /**
  492. * card state machine
  493. */
  494. enum qeth_card_states {
  495. CARD_STATE_DOWN,
  496. CARD_STATE_SOFTSETUP,
  497. };
  498. /**
  499. * Protocol versions
  500. */
  501. enum qeth_prot_versions {
  502. QETH_PROT_NONE = 0x0000,
  503. QETH_PROT_IPV4 = 0x0004,
  504. QETH_PROT_IPV6 = 0x0006,
  505. };
  506. enum qeth_cq {
  507. QETH_CQ_DISABLED = 0,
  508. QETH_CQ_ENABLED = 1,
  509. QETH_CQ_NOTAVAILABLE = 2,
  510. };
  511. struct qeth_ipato {
  512. bool enabled;
  513. bool invert4;
  514. bool invert6;
  515. struct list_head entries;
  516. };
  517. struct qeth_channel {
  518. struct ccw_device *ccwdev;
  519. struct qeth_cmd_buffer *active_cmd;
  520. enum qeth_channel_states state;
  521. };
  522. struct qeth_reply {
  523. int (*callback)(struct qeth_card *card, struct qeth_reply *reply,
  524. unsigned long data);
  525. void *param;
  526. };
  527. struct qeth_cmd_buffer {
  528. struct list_head list_entry;
  529. struct completion done;
  530. spinlock_t lock;
  531. unsigned int length;
  532. refcount_t ref_count;
  533. struct qeth_channel *channel;
  534. struct qeth_reply reply;
  535. long timeout;
  536. unsigned char *data;
  537. void (*finalize)(struct qeth_card *card, struct qeth_cmd_buffer *iob);
  538. bool (*match)(struct qeth_cmd_buffer *iob,
  539. struct qeth_cmd_buffer *reply);
  540. void (*callback)(struct qeth_card *card, struct qeth_cmd_buffer *iob,
  541. unsigned int data_length);
  542. int rc;
  543. };
  544. static inline void qeth_get_cmd(struct qeth_cmd_buffer *iob)
  545. {
  546. refcount_inc(&iob->ref_count);
  547. }
  548. static inline struct qeth_ipa_cmd *__ipa_reply(struct qeth_cmd_buffer *iob)
  549. {
  550. if (!IS_IPA(iob->data))
  551. return NULL;
  552. return (struct qeth_ipa_cmd *) PDU_ENCAPSULATION(iob->data);
  553. }
  554. static inline struct qeth_ipa_cmd *__ipa_cmd(struct qeth_cmd_buffer *iob)
  555. {
  556. return (struct qeth_ipa_cmd *)(iob->data + IPA_PDU_HEADER_SIZE);
  557. }
  558. static inline struct ccw1 *__ccw_from_cmd(struct qeth_cmd_buffer *iob)
  559. {
  560. return (struct ccw1 *)(iob->data + ALIGN(iob->length, 8));
  561. }
  562. /**
  563. * OSA card related definitions
  564. */
  565. struct qeth_token {
  566. __u32 issuer_rm_w;
  567. __u32 issuer_rm_r;
  568. __u32 cm_filter_w;
  569. __u32 cm_filter_r;
  570. __u32 cm_connection_w;
  571. __u32 cm_connection_r;
  572. __u32 ulp_filter_w;
  573. __u32 ulp_filter_r;
  574. __u32 ulp_connection_w;
  575. __u32 ulp_connection_r;
  576. };
  577. struct qeth_seqno {
  578. __u32 trans_hdr;
  579. __u32 pdu_hdr;
  580. __u32 pdu_hdr_ack;
  581. __u16 ipa;
  582. };
  583. struct qeth_card_blkt {
  584. int time_total;
  585. int inter_packet;
  586. int inter_packet_jumbo;
  587. };
  588. enum qeth_pnso_mode {
  589. QETH_PNSO_NONE,
  590. QETH_PNSO_BRIDGEPORT,
  591. QETH_PNSO_ADDR_INFO,
  592. };
  593. enum qeth_link_mode {
  594. QETH_LINK_MODE_UNKNOWN,
  595. QETH_LINK_MODE_FIBRE_SHORT,
  596. QETH_LINK_MODE_FIBRE_LONG,
  597. };
  598. struct qeth_link_info {
  599. u32 speed;
  600. u8 duplex;
  601. u8 port;
  602. enum qeth_link_mode link_mode;
  603. };
  604. #define QETH_BROADCAST_WITH_ECHO 0x01
  605. #define QETH_BROADCAST_WITHOUT_ECHO 0x02
  606. struct qeth_card_info {
  607. unsigned short unit_addr2;
  608. unsigned short cula;
  609. __u16 func_level;
  610. char mcl_level[QETH_MCL_LENGTH + 1];
  611. /* doubleword below corresponds to net_if_token */
  612. u16 ddev_devno;
  613. u8 cssid;
  614. u8 iid;
  615. u8 ssid;
  616. u8 chpid;
  617. u16 chid;
  618. u8 ids_valid:1; /* cssid,iid,chid */
  619. u8 dev_addr_is_registered:1;
  620. u8 promisc_mode:1;
  621. u8 use_v1_blkt:1;
  622. u8 is_vm_nic:1;
  623. /* no bitfield, we take a pointer on these two: */
  624. u8 has_lp2lp_cso_v6;
  625. u8 has_lp2lp_cso_v4;
  626. enum qeth_pnso_mode pnso_mode;
  627. enum qeth_card_types type;
  628. enum qeth_link_types link_type;
  629. int broadcast_capable;
  630. bool layer_enforced;
  631. struct qeth_card_blkt blkt;
  632. __u32 diagass_support;
  633. __u32 hwtrap;
  634. struct qeth_link_info link_info;
  635. };
  636. enum qeth_discipline_id {
  637. QETH_DISCIPLINE_UNDETERMINED = -1,
  638. QETH_DISCIPLINE_LAYER3 = 0,
  639. QETH_DISCIPLINE_LAYER2 = 1,
  640. };
  641. struct qeth_card_options {
  642. struct qeth_ipa_caps ipa4;
  643. struct qeth_ipa_caps ipa6;
  644. struct qeth_routing_info route4;
  645. struct qeth_routing_info route6;
  646. struct qeth_ipa_caps adp; /* Adapter parameters */
  647. struct qeth_sbp_info sbp; /* SETBRIDGEPORT options */
  648. struct qeth_vnicc_info vnicc; /* VNICC options */
  649. enum qeth_discipline_id layer;
  650. enum qeth_ipa_isolation_modes isolation;
  651. int sniffer;
  652. enum qeth_cq cq;
  653. char hsuid[9];
  654. };
  655. #define IS_LAYER2(card) ((card)->options.layer == QETH_DISCIPLINE_LAYER2)
  656. #define IS_LAYER3(card) ((card)->options.layer == QETH_DISCIPLINE_LAYER3)
  657. /*
  658. * thread bits for qeth_card thread masks
  659. */
  660. enum qeth_threads {
  661. QETH_RECOVER_THREAD = 1,
  662. };
  663. struct qeth_discipline {
  664. int (*setup) (struct ccwgroup_device *);
  665. void (*remove) (struct ccwgroup_device *);
  666. int (*set_online)(struct qeth_card *card, bool carrier_ok);
  667. void (*set_offline)(struct qeth_card *card);
  668. int (*control_event_handler)(struct qeth_card *card,
  669. struct qeth_ipa_cmd *cmd);
  670. };
  671. enum qeth_addr_disposition {
  672. QETH_DISP_ADDR_DELETE = 0,
  673. QETH_DISP_ADDR_DO_NOTHING = 1,
  674. QETH_DISP_ADDR_ADD = 2,
  675. };
  676. struct qeth_rx {
  677. int b_count;
  678. int b_index;
  679. u8 buf_element;
  680. int e_offset;
  681. int qdio_err;
  682. u8 bufs_refill;
  683. };
  684. struct qeth_switch_info {
  685. __u32 capabilities;
  686. __u32 settings;
  687. };
  688. struct qeth_priv {
  689. unsigned int rx_copybreak;
  690. unsigned int tx_wanted_queues;
  691. u32 brport_hw_features;
  692. u32 brport_features;
  693. };
  694. struct qeth_card {
  695. enum qeth_card_states state;
  696. spinlock_t lock;
  697. struct ccwgroup_device *gdev;
  698. struct qeth_cmd_buffer *read_cmd;
  699. struct qeth_channel read;
  700. struct qeth_channel write;
  701. struct qeth_channel data;
  702. struct net_device *dev;
  703. struct dentry *debugfs;
  704. struct qeth_card_stats stats;
  705. struct qeth_card_info info;
  706. struct qeth_token token;
  707. struct qeth_seqno seqno;
  708. struct qeth_card_options options;
  709. struct workqueue_struct *event_wq;
  710. struct workqueue_struct *cmd_wq;
  711. wait_queue_head_t wait_q;
  712. struct mutex ip_lock;
  713. /* protected by ip_lock: */
  714. DECLARE_HASHTABLE(ip_htable, 4);
  715. struct qeth_ipato ipato;
  716. DECLARE_HASHTABLE(local_addrs4, 4);
  717. DECLARE_HASHTABLE(local_addrs6, 4);
  718. spinlock_t local_addrs4_lock;
  719. spinlock_t local_addrs6_lock;
  720. DECLARE_HASHTABLE(rx_mode_addrs, 4);
  721. struct work_struct rx_mode_work;
  722. struct work_struct kernel_thread_starter;
  723. spinlock_t thread_mask_lock;
  724. unsigned long thread_start_mask;
  725. unsigned long thread_allowed_mask;
  726. unsigned long thread_running_mask;
  727. struct list_head cmd_waiter_list;
  728. /* QDIO buffer handling */
  729. struct qeth_qdio_info qdio;
  730. int read_or_write_problem;
  731. const struct qeth_discipline *discipline;
  732. atomic_t force_alloc_skb;
  733. struct service_level qeth_service_level;
  734. struct qdio_ssqd_desc ssqd;
  735. debug_info_t *debug;
  736. struct mutex sbp_lock;
  737. struct mutex conf_mutex;
  738. struct mutex discipline_mutex;
  739. struct napi_struct napi;
  740. struct qeth_rx rx;
  741. struct delayed_work buffer_reclaim_work;
  742. };
  743. static inline bool qeth_card_hw_is_reachable(struct qeth_card *card)
  744. {
  745. return card->state == CARD_STATE_SOFTSETUP;
  746. }
  747. static inline bool qeth_use_tx_irqs(struct qeth_card *card)
  748. {
  749. return !IS_IQD(card);
  750. }
  751. static inline void qeth_unlock_channel(struct qeth_card *card,
  752. struct qeth_channel *channel)
  753. {
  754. xchg(&channel->active_cmd, NULL);
  755. wake_up(&card->wait_q);
  756. }
  757. static inline bool qeth_trylock_channel(struct qeth_channel *channel,
  758. struct qeth_cmd_buffer *cmd)
  759. {
  760. return cmpxchg(&channel->active_cmd, NULL, cmd) == NULL;
  761. }
  762. struct qeth_trap_id {
  763. __u16 lparnr;
  764. char vmname[8];
  765. __u8 chpid;
  766. __u8 ssid;
  767. __u16 devno;
  768. } __packed;
  769. static inline bool qeth_uses_tx_prio_queueing(struct qeth_card *card)
  770. {
  771. return card->qdio.do_prio_queueing != QETH_NO_PRIO_QUEUEING;
  772. }
  773. static inline unsigned int qeth_tx_actual_queues(struct qeth_card *card)
  774. {
  775. struct qeth_priv *priv = netdev_priv(card->dev);
  776. if (qeth_uses_tx_prio_queueing(card))
  777. return min(card->dev->num_tx_queues, card->qdio.no_out_queues);
  778. return min(priv->tx_wanted_queues, card->qdio.no_out_queues);
  779. }
  780. static inline u16 qeth_iqd_translate_txq(struct net_device *dev, u16 txq)
  781. {
  782. if (txq == QETH_IQD_MCAST_TXQ)
  783. return dev->num_tx_queues - 1;
  784. if (txq == dev->num_tx_queues - 1)
  785. return QETH_IQD_MCAST_TXQ;
  786. return txq;
  787. }
  788. static inline bool qeth_iqd_is_mcast_queue(struct qeth_card *card,
  789. struct qeth_qdio_out_q *queue)
  790. {
  791. return qeth_iqd_translate_txq(card->dev, queue->queue_no) ==
  792. QETH_IQD_MCAST_TXQ;
  793. }
  794. static inline void qeth_scrub_qdio_buffer(struct qdio_buffer *buf,
  795. unsigned int elements)
  796. {
  797. unsigned int i;
  798. for (i = 0; i < elements; i++)
  799. memset(&buf->element[i], 0, sizeof(struct qdio_buffer_element));
  800. buf->element[14].sflags = 0;
  801. buf->element[15].sflags = 0;
  802. }
  803. /**
  804. * qeth_get_elements_for_range() - find number of SBALEs to cover range.
  805. * @start: Start of the address range.
  806. * @end: Address after the end of the range.
  807. *
  808. * Returns the number of pages, and thus QDIO buffer elements, needed to cover
  809. * the specified address range.
  810. */
  811. static inline int qeth_get_elements_for_range(addr_t start, addr_t end)
  812. {
  813. return PFN_UP(end) - PFN_DOWN(start);
  814. }
  815. static inline int qeth_get_ether_cast_type(struct sk_buff *skb)
  816. {
  817. u8 *addr = eth_hdr(skb)->h_dest;
  818. if (is_multicast_ether_addr(addr))
  819. return is_broadcast_ether_addr(addr) ? RTN_BROADCAST :
  820. RTN_MULTICAST;
  821. return RTN_UNICAST;
  822. }
  823. static inline struct dst_entry *qeth_dst_check_rcu(struct sk_buff *skb,
  824. __be16 proto)
  825. {
  826. struct dst_entry *dst = skb_dst(skb);
  827. struct rt6_info *rt;
  828. rt = dst_rt6_info(dst);
  829. if (dst) {
  830. if (proto == htons(ETH_P_IPV6))
  831. dst = dst_check(dst, rt6_get_cookie(rt));
  832. else
  833. dst = dst_check(dst, 0);
  834. }
  835. return dst;
  836. }
  837. static inline __be32 qeth_next_hop_v4_rcu(struct sk_buff *skb,
  838. struct dst_entry *dst)
  839. {
  840. return (dst) ? rt_nexthop(dst_rtable(dst), ip_hdr(skb)->daddr) :
  841. ip_hdr(skb)->daddr;
  842. }
  843. static inline struct in6_addr *qeth_next_hop_v6_rcu(struct sk_buff *skb,
  844. struct dst_entry *dst)
  845. {
  846. struct rt6_info *rt = dst_rt6_info(dst);
  847. if (rt && !ipv6_addr_any(&rt->rt6i_gateway))
  848. return &rt->rt6i_gateway;
  849. else
  850. return &ipv6_hdr(skb)->daddr;
  851. }
  852. static inline void qeth_tx_csum(struct sk_buff *skb, u8 *flags, __be16 proto)
  853. {
  854. *flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ;
  855. if ((proto == htons(ETH_P_IP) && ip_hdr(skb)->protocol == IPPROTO_UDP) ||
  856. (proto == htons(ETH_P_IPV6) && ipv6_hdr(skb)->nexthdr == IPPROTO_UDP))
  857. *flags |= QETH_HDR_EXT_UDP;
  858. }
  859. static inline void qeth_put_buffer_pool_entry(struct qeth_card *card,
  860. struct qeth_buffer_pool_entry *entry)
  861. {
  862. list_add_tail(&entry->list, &card->qdio.in_buf_pool.entry_list);
  863. }
  864. static inline int qeth_is_diagass_supported(struct qeth_card *card,
  865. enum qeth_diags_cmds cmd)
  866. {
  867. return card->info.diagass_support & (__u32)cmd;
  868. }
  869. int qeth_send_simple_setassparms_prot(struct qeth_card *card,
  870. enum qeth_ipa_funcs ipa_func,
  871. u16 cmd_code, u32 *data,
  872. enum qeth_prot_versions prot);
  873. /* IPv4 variant */
  874. static inline int qeth_send_simple_setassparms(struct qeth_card *card,
  875. enum qeth_ipa_funcs ipa_func,
  876. u16 cmd_code, u32 *data)
  877. {
  878. return qeth_send_simple_setassparms_prot(card, ipa_func, cmd_code,
  879. data, QETH_PROT_IPV4);
  880. }
  881. static inline int qeth_send_simple_setassparms_v6(struct qeth_card *card,
  882. enum qeth_ipa_funcs ipa_func,
  883. u16 cmd_code, u32 *data)
  884. {
  885. return qeth_send_simple_setassparms_prot(card, ipa_func, cmd_code,
  886. data, QETH_PROT_IPV6);
  887. }
  888. extern const struct qeth_discipline qeth_l2_discipline;
  889. extern const struct qeth_discipline qeth_l3_discipline;
  890. extern const struct ethtool_ops qeth_ethtool_ops;
  891. extern const struct attribute_group *qeth_dev_groups[];
  892. const char *qeth_get_cardname_short(struct qeth_card *);
  893. int qeth_resize_buffer_pool(struct qeth_card *card, unsigned int count);
  894. int qeth_setup_discipline(struct qeth_card *card, enum qeth_discipline_id disc);
  895. void qeth_remove_discipline(struct qeth_card *card);
  896. /* exports for qeth discipline device drivers */
  897. extern struct qeth_dbf_info qeth_dbf[QETH_DBF_INFOS];
  898. struct net_device *qeth_clone_netdev(struct net_device *orig);
  899. void qeth_set_allowed_threads(struct qeth_card *card, unsigned long threads,
  900. int clear_start_mask);
  901. int qeth_threads_running(struct qeth_card *, unsigned long);
  902. int qeth_set_offline(struct qeth_card *card, const struct qeth_discipline *disc,
  903. bool resetting);
  904. int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *,
  905. int (*reply_cb)
  906. (struct qeth_card *, struct qeth_reply *, unsigned long),
  907. void *);
  908. struct qeth_cmd_buffer *qeth_ipa_alloc_cmd(struct qeth_card *card,
  909. enum qeth_ipa_cmds cmd_code,
  910. enum qeth_prot_versions prot,
  911. unsigned int data_length);
  912. struct qeth_cmd_buffer *qeth_get_setassparms_cmd(struct qeth_card *card,
  913. enum qeth_ipa_funcs ipa_func,
  914. u16 cmd_code,
  915. unsigned int data_length,
  916. enum qeth_prot_versions prot);
  917. struct qeth_cmd_buffer *qeth_get_diag_cmd(struct qeth_card *card,
  918. enum qeth_diags_cmds sub_cmd,
  919. unsigned int data_length);
  920. int qeth_schedule_recovery(struct qeth_card *card);
  921. int qeth_poll(struct napi_struct *napi, int budget);
  922. void qeth_setadp_promisc_mode(struct qeth_card *card, bool enable);
  923. int qeth_setadpparms_change_macaddr(struct qeth_card *);
  924. void qeth_tx_timeout(struct net_device *, unsigned int txqueue);
  925. int qeth_query_switch_attributes(struct qeth_card *card,
  926. struct qeth_switch_info *sw_info);
  927. int qeth_query_card_info(struct qeth_card *card,
  928. struct qeth_link_info *link_info);
  929. int qeth_setadpparms_set_access_ctrl(struct qeth_card *card,
  930. enum qeth_ipa_isolation_modes mode);
  931. int qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
  932. int qeth_siocdevprivate(struct net_device *dev, struct ifreq *rq,
  933. void __user *data, int cmd);
  934. __printf(3, 4)
  935. void qeth_dbf_longtext(debug_info_t *id, int level, char *text, ...);
  936. int qeth_configure_cq(struct qeth_card *, enum qeth_cq);
  937. int qeth_hw_trap(struct qeth_card *, enum qeth_diags_trap_action);
  938. int qeth_setassparms_cb(struct qeth_card *, struct qeth_reply *, unsigned long);
  939. int qeth_set_features(struct net_device *, netdev_features_t);
  940. void qeth_enable_hw_features(struct net_device *dev);
  941. netdev_features_t qeth_fix_features(struct net_device *, netdev_features_t);
  942. netdev_features_t qeth_features_check(struct sk_buff *skb,
  943. struct net_device *dev,
  944. netdev_features_t features);
  945. void qeth_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats);
  946. int qeth_set_real_num_tx_queues(struct qeth_card *card, unsigned int count);
  947. u16 qeth_iqd_select_queue(struct net_device *dev, struct sk_buff *skb,
  948. u8 cast_type, struct net_device *sb_dev);
  949. u16 qeth_osa_select_queue(struct net_device *dev, struct sk_buff *skb,
  950. struct net_device *sb_dev);
  951. int qeth_open(struct net_device *dev);
  952. int qeth_stop(struct net_device *dev);
  953. int qeth_vm_request_mac(struct qeth_card *card);
  954. int qeth_xmit(struct qeth_card *card, struct sk_buff *skb,
  955. struct qeth_qdio_out_q *queue, __be16 proto,
  956. void (*fill_header)(struct qeth_qdio_out_q *queue,
  957. struct qeth_hdr *hdr, struct sk_buff *skb,
  958. __be16 proto, unsigned int data_len));
  959. #endif /* __QETH_CORE_H__ */