Lines Matching refs:card
75 struct qeth_card *card; in qeth_close_dev_handler() local
77 card = container_of(work, struct qeth_card, close_dev_work); in qeth_close_dev_handler()
78 QETH_CARD_TEXT(card, 2, "cldevhdl"); in qeth_close_dev_handler()
80 dev_close(card->dev); in qeth_close_dev_handler()
82 ccwgroup_set_offline(card->gdev); in qeth_close_dev_handler()
85 void qeth_close_dev(struct qeth_card *card) in qeth_close_dev() argument
87 QETH_CARD_TEXT(card, 2, "cldevsubm"); in qeth_close_dev()
88 queue_work(qeth_wq, &card->close_dev_work); in qeth_close_dev()
92 static inline const char *qeth_get_cardname(struct qeth_card *card) in qeth_get_cardname() argument
94 if (card->info.guestlan) { in qeth_get_cardname()
95 switch (card->info.type) { in qeth_get_cardname()
108 switch (card->info.type) { in qeth_get_cardname()
127 const char *qeth_get_cardname_short(struct qeth_card *card) in qeth_get_cardname_short() argument
129 if (card->info.guestlan) { in qeth_get_cardname_short()
130 switch (card->info.type) { in qeth_get_cardname_short()
143 switch (card->info.type) { in qeth_get_cardname_short()
145 switch (card->info.link_type) { in qeth_get_cardname_short()
180 void qeth_set_recovery_task(struct qeth_card *card) in qeth_set_recovery_task() argument
182 card->recovery_task = current; in qeth_set_recovery_task()
186 void qeth_clear_recovery_task(struct qeth_card *card) in qeth_clear_recovery_task() argument
188 card->recovery_task = NULL; in qeth_clear_recovery_task()
192 static bool qeth_is_recovery_task(const struct qeth_card *card) in qeth_is_recovery_task() argument
194 return card->recovery_task == current; in qeth_is_recovery_task()
197 void qeth_set_allowed_threads(struct qeth_card *card, unsigned long threads, in qeth_set_allowed_threads() argument
202 spin_lock_irqsave(&card->thread_mask_lock, flags); in qeth_set_allowed_threads()
203 card->thread_allowed_mask = threads; in qeth_set_allowed_threads()
205 card->thread_start_mask &= threads; in qeth_set_allowed_threads()
206 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in qeth_set_allowed_threads()
207 wake_up(&card->wait_q); in qeth_set_allowed_threads()
211 int qeth_threads_running(struct qeth_card *card, unsigned long threads) in qeth_threads_running() argument
216 spin_lock_irqsave(&card->thread_mask_lock, flags); in qeth_threads_running()
217 rc = (card->thread_running_mask & threads); in qeth_threads_running()
218 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in qeth_threads_running()
223 int qeth_wait_for_threads(struct qeth_card *card, unsigned long threads) in qeth_wait_for_threads() argument
225 if (qeth_is_recovery_task(card)) in qeth_wait_for_threads()
227 return wait_event_interruptible(card->wait_q, in qeth_wait_for_threads()
228 qeth_threads_running(card, threads) == 0); in qeth_wait_for_threads()
232 void qeth_clear_working_pool_list(struct qeth_card *card) in qeth_clear_working_pool_list() argument
236 QETH_CARD_TEXT(card, 5, "clwrklst"); in qeth_clear_working_pool_list()
238 &card->qdio.in_buf_pool.entry_list, list){ in qeth_clear_working_pool_list()
244 static int qeth_alloc_buffer_pool(struct qeth_card *card) in qeth_alloc_buffer_pool() argument
250 QETH_CARD_TEXT(card, 5, "alocpool"); in qeth_alloc_buffer_pool()
251 for (i = 0; i < card->qdio.init_pool.buf_count; ++i) { in qeth_alloc_buffer_pool()
254 qeth_free_buffer_pool(card); in qeth_alloc_buffer_pool()
257 for (j = 0; j < QETH_MAX_BUFFER_ELEMENTS(card); ++j) { in qeth_alloc_buffer_pool()
264 qeth_free_buffer_pool(card); in qeth_alloc_buffer_pool()
270 &card->qdio.init_pool.entry_list); in qeth_alloc_buffer_pool()
275 int qeth_realloc_buffer_pool(struct qeth_card *card, int bufcnt) in qeth_realloc_buffer_pool() argument
277 QETH_CARD_TEXT(card, 2, "realcbp"); in qeth_realloc_buffer_pool()
279 if ((card->state != CARD_STATE_DOWN) && in qeth_realloc_buffer_pool()
280 (card->state != CARD_STATE_RECOVER)) in qeth_realloc_buffer_pool()
284 qeth_clear_working_pool_list(card); in qeth_realloc_buffer_pool()
285 qeth_free_buffer_pool(card); in qeth_realloc_buffer_pool()
286 card->qdio.in_buf_pool.buf_count = bufcnt; in qeth_realloc_buffer_pool()
287 card->qdio.init_pool.buf_count = bufcnt; in qeth_realloc_buffer_pool()
288 return qeth_alloc_buffer_pool(card); in qeth_realloc_buffer_pool()
292 static inline int qeth_cq_init(struct qeth_card *card) in qeth_cq_init() argument
296 if (card->options.cq == QETH_CQ_ENABLED) { in qeth_cq_init()
298 memset(card->qdio.c_q->qdio_bufs, 0, in qeth_cq_init()
300 card->qdio.c_q->next_buf_to_init = 127; in qeth_cq_init()
301 rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, in qeth_cq_init()
302 card->qdio.no_in_queues - 1, 0, in qeth_cq_init()
314 static inline int qeth_alloc_cq(struct qeth_card *card) in qeth_alloc_cq() argument
318 if (card->options.cq == QETH_CQ_ENABLED) { in qeth_alloc_cq()
323 card->qdio.c_q = kzalloc(sizeof(struct qeth_qdio_q), in qeth_alloc_cq()
325 if (!card->qdio.c_q) { in qeth_alloc_cq()
329 QETH_DBF_HEX(SETUP, 2, &card->qdio.c_q, sizeof(void *)); in qeth_alloc_cq()
332 card->qdio.c_q->bufs[i].buffer = in qeth_alloc_cq()
333 &card->qdio.c_q->qdio_bufs[i]; in qeth_alloc_cq()
336 card->qdio.no_in_queues = 2; in qeth_alloc_cq()
338 card->qdio.out_bufstates = in qeth_alloc_cq()
339 kzalloc(card->qdio.no_out_queues * in qeth_alloc_cq()
342 outbuf_states = card->qdio.out_bufstates; in qeth_alloc_cq()
347 for (i = 0; i < card->qdio.no_out_queues; ++i) { in qeth_alloc_cq()
348 card->qdio.out_qs[i]->bufstates = outbuf_states; in qeth_alloc_cq()
353 card->qdio.c_q = NULL; in qeth_alloc_cq()
354 card->qdio.no_in_queues = 1; in qeth_alloc_cq()
356 QETH_DBF_TEXT_(SETUP, 2, "iqc%d", card->qdio.no_in_queues); in qeth_alloc_cq()
361 kfree(card->qdio.c_q); in qeth_alloc_cq()
362 card->qdio.c_q = NULL; in qeth_alloc_cq()
364 dev_err(&card->gdev->dev, "Failed to create completion queue\n"); in qeth_alloc_cq()
368 static inline void qeth_free_cq(struct qeth_card *card) in qeth_free_cq() argument
370 if (card->qdio.c_q) { in qeth_free_cq()
371 --card->qdio.no_in_queues; in qeth_free_cq()
372 kfree(card->qdio.c_q); in qeth_free_cq()
373 card->qdio.c_q = NULL; in qeth_free_cq()
375 kfree(card->qdio.out_bufstates); in qeth_free_cq()
376 card->qdio.out_bufstates = NULL; in qeth_free_cq()
406 if (q->card->options.cq != QETH_CQ_ENABLED) in qeth_cleanup_handled_pending()
418 QETH_CARD_TEXT(f->q->card, 5, "fp"); in qeth_cleanup_handled_pending()
419 QETH_CARD_TEXT_(f->q->card, 5, "%lx", (long) f); in qeth_cleanup_handled_pending()
441 QETH_CARD_TEXT(q->card, 2, "clprecov"); in qeth_cleanup_handled_pending()
446 static inline void qeth_qdio_handle_aob(struct qeth_card *card, in qeth_qdio_handle_aob() argument
453 QETH_CARD_TEXT(card, 5, "haob"); in qeth_qdio_handle_aob()
454 QETH_CARD_TEXT_(card, 5, "%lx", phys_aob_addr); in qeth_qdio_handle_aob()
456 QETH_CARD_TEXT_(card, 5, "%lx", aob->user1); in qeth_qdio_handle_aob()
469 QETH_CARD_TEXT_(card, 2, "aorc%02X", aob->aorc); in qeth_qdio_handle_aob()
482 static inline int qeth_is_cq(struct qeth_card *card, unsigned int queue) in qeth_is_cq() argument
484 return card->options.cq == QETH_CQ_ENABLED && in qeth_is_cq()
485 card->qdio.c_q != NULL && in qeth_is_cq()
487 queue == card->qdio.no_in_queues - 1; in qeth_is_cq()
491 static int qeth_issue_next_read(struct qeth_card *card) in qeth_issue_next_read() argument
496 QETH_CARD_TEXT(card, 5, "issnxrd"); in qeth_issue_next_read()
497 if (card->read.state != CH_STATE_UP) in qeth_issue_next_read()
499 iob = qeth_get_buffer(&card->read); in qeth_issue_next_read()
501 dev_warn(&card->gdev->dev, "The qeth device driver " in qeth_issue_next_read()
504 "available\n", dev_name(&card->gdev->dev)); in qeth_issue_next_read()
507 qeth_setup_ccw(&card->read, iob->data, QETH_BUFSIZE); in qeth_issue_next_read()
508 QETH_CARD_TEXT(card, 6, "noirqpnd"); in qeth_issue_next_read()
509 rc = ccw_device_start(card->read.ccwdev, &card->read.ccw, in qeth_issue_next_read()
513 "rc=%i\n", dev_name(&card->gdev->dev), rc); in qeth_issue_next_read()
514 atomic_set(&card->read.irq_pending, 0); in qeth_issue_next_read()
515 card->read_or_write_problem = 1; in qeth_issue_next_read()
516 qeth_schedule_recovery(card); in qeth_issue_next_read()
517 wake_up(&card->wait_q); in qeth_issue_next_read()
522 static struct qeth_reply *qeth_alloc_reply(struct qeth_card *card) in qeth_alloc_reply() argument
530 reply->card = card; in qeth_alloc_reply()
549 struct qeth_card *card) in qeth_issue_ipa_msg() argument
557 ipa_name, com, dev_name(&card->gdev->dev), in qeth_issue_ipa_msg()
558 QETH_CARD_IFNAME(card), rc, in qeth_issue_ipa_msg()
562 ipa_name, com, dev_name(&card->gdev->dev), in qeth_issue_ipa_msg()
563 QETH_CARD_IFNAME(card)); in qeth_issue_ipa_msg()
566 static struct qeth_ipa_cmd *qeth_check_ipa_data(struct qeth_card *card, in qeth_check_ipa_data() argument
571 QETH_CARD_TEXT(card, 5, "chkipad"); in qeth_check_ipa_data()
580 cmd->hdr.return_code, card); in qeth_check_ipa_data()
587 dev_err(&card->gdev->dev, in qeth_check_ipa_data()
591 QETH_CARD_IFNAME(card)); in qeth_check_ipa_data()
592 qeth_close_dev(card); in qeth_check_ipa_data()
594 dev_warn(&card->gdev->dev, in qeth_check_ipa_data()
597 QETH_CARD_IFNAME(card), in qeth_check_ipa_data()
598 card->info.chpid); in qeth_check_ipa_data()
600 cmd->hdr.return_code, card); in qeth_check_ipa_data()
602 card->lan_online = 0; in qeth_check_ipa_data()
603 if (card->dev && netif_carrier_ok(card->dev)) in qeth_check_ipa_data()
604 netif_carrier_off(card->dev); in qeth_check_ipa_data()
607 dev_info(&card->gdev->dev, in qeth_check_ipa_data()
610 QETH_CARD_IFNAME(card), in qeth_check_ipa_data()
611 card->info.chpid); in qeth_check_ipa_data()
612 netif_carrier_on(card->dev); in qeth_check_ipa_data()
613 card->lan_online = 1; in qeth_check_ipa_data()
614 if (card->info.hwtrap) in qeth_check_ipa_data()
615 card->info.hwtrap = 2; in qeth_check_ipa_data()
616 qeth_schedule_recovery(card); in qeth_check_ipa_data()
621 QETH_CARD_TEXT(card, 3, "irla"); in qeth_check_ipa_data()
624 QETH_CARD_TEXT(card, 3, "urla"); in qeth_check_ipa_data()
636 void qeth_clear_ipacmd_list(struct qeth_card *card) in qeth_clear_ipacmd_list() argument
641 QETH_CARD_TEXT(card, 4, "clipalst"); in qeth_clear_ipacmd_list()
643 spin_lock_irqsave(&card->lock, flags); in qeth_clear_ipacmd_list()
644 list_for_each_entry_safe(reply, r, &card->cmd_waiter_list, list) { in qeth_clear_ipacmd_list()
652 spin_unlock_irqrestore(&card->lock, flags); in qeth_clear_ipacmd_list()
653 atomic_set(&card->write.irq_pending, 0); in qeth_clear_ipacmd_list()
657 static int qeth_check_idx_response(struct qeth_card *card, in qeth_check_idx_response() argument
670 QETH_CARD_TEXT(card, 2, "ckidxres"); in qeth_check_idx_response()
671 QETH_CARD_TEXT(card, 2, " idxterm"); in qeth_check_idx_response()
672 QETH_CARD_TEXT_(card, 2, " rc%d", -EIO); in qeth_check_idx_response()
674 dev_err(&card->gdev->dev, in qeth_check_idx_response()
687 struct qeth_card *card; in qeth_setup_ccw() local
689 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_setup_ccw()
690 QETH_CARD_TEXT(card, 4, "setupccw"); in qeth_setup_ccw()
691 if (channel == &card->read) in qeth_setup_ccw()
769 struct qeth_card *card; in qeth_send_control_data_cb() local
776 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_send_control_data_cb()
777 QETH_CARD_TEXT(card, 4, "sndctlcb"); in qeth_send_control_data_cb()
778 rc = qeth_check_idx_response(card, iob->data); in qeth_send_control_data_cb()
783 qeth_clear_ipacmd_list(card); in qeth_send_control_data_cb()
784 qeth_schedule_recovery(card); in qeth_send_control_data_cb()
790 cmd = qeth_check_ipa_data(card, iob); in qeth_send_control_data_cb()
791 if ((cmd == NULL) && (card->state != CARD_STATE_DOWN)) in qeth_send_control_data_cb()
794 if (card->info.type == QETH_CARD_TYPE_OSN && in qeth_send_control_data_cb()
797 card->osn_info.assist_cb != NULL) { in qeth_send_control_data_cb()
798 card->osn_info.assist_cb(card->dev, cmd); in qeth_send_control_data_cb()
802 spin_lock_irqsave(&card->lock, flags); in qeth_send_control_data_cb()
803 list_for_each_entry_safe(reply, r, &card->cmd_waiter_list, list) { in qeth_send_control_data_cb()
808 spin_unlock_irqrestore(&card->lock, flags); in qeth_send_control_data_cb()
814 keep_reply = reply->callback(card, in qeth_send_control_data_cb()
818 keep_reply = reply->callback(card, in qeth_send_control_data_cb()
827 spin_lock_irqsave(&card->lock, flags); in qeth_send_control_data_cb()
829 &card->cmd_waiter_list); in qeth_send_control_data_cb()
830 spin_unlock_irqrestore(&card->lock, flags); in qeth_send_control_data_cb()
839 spin_unlock_irqrestore(&card->lock, flags); in qeth_send_control_data_cb()
841 memcpy(&card->seqno.pdu_hdr_ack, in qeth_send_control_data_cb()
876 static int qeth_set_thread_start_bit(struct qeth_card *card, in qeth_set_thread_start_bit() argument
881 spin_lock_irqsave(&card->thread_mask_lock, flags); in qeth_set_thread_start_bit()
882 if (!(card->thread_allowed_mask & thread) || in qeth_set_thread_start_bit()
883 (card->thread_start_mask & thread)) { in qeth_set_thread_start_bit()
884 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in qeth_set_thread_start_bit()
887 card->thread_start_mask |= thread; in qeth_set_thread_start_bit()
888 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in qeth_set_thread_start_bit()
892 void qeth_clear_thread_start_bit(struct qeth_card *card, unsigned long thread) in qeth_clear_thread_start_bit() argument
896 spin_lock_irqsave(&card->thread_mask_lock, flags); in qeth_clear_thread_start_bit()
897 card->thread_start_mask &= ~thread; in qeth_clear_thread_start_bit()
898 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in qeth_clear_thread_start_bit()
899 wake_up(&card->wait_q); in qeth_clear_thread_start_bit()
903 void qeth_clear_thread_running_bit(struct qeth_card *card, unsigned long thread) in qeth_clear_thread_running_bit() argument
907 spin_lock_irqsave(&card->thread_mask_lock, flags); in qeth_clear_thread_running_bit()
908 card->thread_running_mask &= ~thread; in qeth_clear_thread_running_bit()
909 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in qeth_clear_thread_running_bit()
910 wake_up(&card->wait_q); in qeth_clear_thread_running_bit()
914 static int __qeth_do_run_thread(struct qeth_card *card, unsigned long thread) in __qeth_do_run_thread() argument
919 spin_lock_irqsave(&card->thread_mask_lock, flags); in __qeth_do_run_thread()
920 if (card->thread_start_mask & thread) { in __qeth_do_run_thread()
921 if ((card->thread_allowed_mask & thread) && in __qeth_do_run_thread()
922 !(card->thread_running_mask & thread)) { in __qeth_do_run_thread()
924 card->thread_start_mask &= ~thread; in __qeth_do_run_thread()
925 card->thread_running_mask |= thread; in __qeth_do_run_thread()
929 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in __qeth_do_run_thread()
933 int qeth_do_run_thread(struct qeth_card *card, unsigned long thread) in qeth_do_run_thread() argument
937 wait_event(card->wait_q, in qeth_do_run_thread()
938 (rc = __qeth_do_run_thread(card, thread)) >= 0); in qeth_do_run_thread()
943 void qeth_schedule_recovery(struct qeth_card *card) in qeth_schedule_recovery() argument
945 QETH_CARD_TEXT(card, 2, "startrec"); in qeth_schedule_recovery()
946 if (qeth_set_thread_start_bit(card, QETH_RECOVER_THREAD) == 0) in qeth_schedule_recovery()
947 schedule_work(&card->kernel_thread_starter); in qeth_schedule_recovery()
955 struct qeth_card *card; in qeth_get_problem() local
960 card = CARD_FROM_CDEV(cdev); in qeth_get_problem()
965 QETH_CARD_TEXT(card, 2, "CGENCHK"); in qeth_get_problem()
978 QETH_CARD_TEXT(card, 2, "REVIND"); in qeth_get_problem()
983 QETH_CARD_TEXT(card, 2, "CMDREJi"); in qeth_get_problem()
987 QETH_CARD_TEXT(card, 2, "AFFE"); in qeth_get_problem()
991 QETH_CARD_TEXT(card, 2, "ZEROSEN"); in qeth_get_problem()
994 QETH_CARD_TEXT(card, 2, "DGENCHK"); in qeth_get_problem()
1003 struct qeth_card *card; in __qeth_check_irb_error() local
1005 card = CARD_FROM_CDEV(cdev); in __qeth_check_irb_error()
1014 QETH_CARD_TEXT(card, 2, "ckirberr"); in __qeth_check_irb_error()
1015 QETH_CARD_TEXT_(card, 2, " rc%d", -EIO); in __qeth_check_irb_error()
1020 QETH_CARD_TEXT(card, 2, "ckirberr"); in __qeth_check_irb_error()
1021 QETH_CARD_TEXT_(card, 2, " rc%d", -ETIMEDOUT); in __qeth_check_irb_error()
1023 if (card && (card->data.ccwdev == cdev)) { in __qeth_check_irb_error()
1024 card->data.state = CH_STATE_DOWN; in __qeth_check_irb_error()
1025 wake_up(&card->wait_q); in __qeth_check_irb_error()
1032 QETH_CARD_TEXT(card, 2, "ckirberr"); in __qeth_check_irb_error()
1033 QETH_CARD_TEXT(card, 2, " rc???"); in __qeth_check_irb_error()
1045 struct qeth_card *card; in qeth_irq() local
1054 card = CARD_FROM_CDEV(cdev); in qeth_irq()
1055 if (!card) in qeth_irq()
1058 QETH_CARD_TEXT(card, 5, "irq"); in qeth_irq()
1060 if (card->read.ccwdev == cdev) { in qeth_irq()
1061 channel = &card->read; in qeth_irq()
1062 QETH_CARD_TEXT(card, 5, "read"); in qeth_irq()
1063 } else if (card->write.ccwdev == cdev) { in qeth_irq()
1064 channel = &card->write; in qeth_irq()
1065 QETH_CARD_TEXT(card, 5, "write"); in qeth_irq()
1067 channel = &card->data; in qeth_irq()
1068 QETH_CARD_TEXT(card, 5, "data"); in qeth_irq()
1079 if ((channel == &card->data) && (intparm != 0) && in qeth_irq()
1084 QETH_CARD_TEXT(card, 6, "clrchpar"); in qeth_irq()
1089 QETH_CARD_TEXT(card, 6, "hltchpar"); in qeth_irq()
1114 qeth_clear_ipacmd_list(card); in qeth_irq()
1115 qeth_schedule_recovery(card); in qeth_irq()
1128 if (channel == &card->data) in qeth_irq()
1130 if (channel == &card->read && in qeth_irq()
1132 qeth_issue_next_read(card); in qeth_irq()
1144 wake_up(&card->wait_q); in qeth_irq()
1158 QETH_CARD_TEXT_(q->card, 5, "skbn%d", notification); in qeth_notify_skbs()
1159 QETH_CARD_TEXT_(q->card, 5, "%lx", (long) skb); in qeth_notify_skbs()
1189 QETH_CARD_TEXT(buf->q->card, 5, "skbr"); in qeth_release_skbs()
1190 QETH_CARD_TEXT_(buf->q->card, 5, "%lx", (long) skb); in qeth_release_skbs()
1216 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(queue->card); ++i) { in qeth_clear_output_buffer()
1248 void qeth_clear_qdio_buffers(struct qeth_card *card) in qeth_clear_qdio_buffers() argument
1252 QETH_CARD_TEXT(card, 2, "clearqdbf"); in qeth_clear_qdio_buffers()
1254 for (i = 0; i < card->qdio.no_out_queues; ++i) { in qeth_clear_qdio_buffers()
1255 if (card->qdio.out_qs[i]) { in qeth_clear_qdio_buffers()
1256 qeth_clear_outq_buffers(card->qdio.out_qs[i], 0); in qeth_clear_qdio_buffers()
1262 static void qeth_free_buffer_pool(struct qeth_card *card) in qeth_free_buffer_pool() argument
1267 &card->qdio.init_pool.entry_list, init_list){ in qeth_free_buffer_pool()
1268 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) in qeth_free_buffer_pool()
1275 static void qeth_free_qdio_buffers(struct qeth_card *card) in qeth_free_qdio_buffers() argument
1279 if (atomic_xchg(&card->qdio.state, QETH_QDIO_UNINITIALIZED) == in qeth_free_qdio_buffers()
1283 qeth_free_cq(card); in qeth_free_qdio_buffers()
1284 cancel_delayed_work_sync(&card->buffer_reclaim_work); in qeth_free_qdio_buffers()
1286 dev_kfree_skb_any(card->qdio.in_q->bufs[j].rx_skb); in qeth_free_qdio_buffers()
1287 kfree(card->qdio.in_q); in qeth_free_qdio_buffers()
1288 card->qdio.in_q = NULL; in qeth_free_qdio_buffers()
1290 qeth_free_buffer_pool(card); in qeth_free_qdio_buffers()
1292 if (card->qdio.out_qs) { in qeth_free_qdio_buffers()
1293 for (i = 0; i < card->qdio.no_out_queues; ++i) { in qeth_free_qdio_buffers()
1294 qeth_clear_outq_buffers(card->qdio.out_qs[i], 1); in qeth_free_qdio_buffers()
1295 kfree(card->qdio.out_qs[i]); in qeth_free_qdio_buffers()
1297 kfree(card->qdio.out_qs); in qeth_free_qdio_buffers()
1298 card->qdio.out_qs = NULL; in qeth_free_qdio_buffers()
1311 static void qeth_set_single_write_queues(struct qeth_card *card) in qeth_set_single_write_queues() argument
1313 if ((atomic_read(&card->qdio.state) != QETH_QDIO_UNINITIALIZED) && in qeth_set_single_write_queues()
1314 (card->qdio.no_out_queues == 4)) in qeth_set_single_write_queues()
1315 qeth_free_qdio_buffers(card); in qeth_set_single_write_queues()
1317 card->qdio.no_out_queues = 1; in qeth_set_single_write_queues()
1318 if (card->qdio.default_out_queue != 0) in qeth_set_single_write_queues()
1319 dev_info(&card->gdev->dev, "Priority Queueing not supported\n"); in qeth_set_single_write_queues()
1321 card->qdio.default_out_queue = 0; in qeth_set_single_write_queues()
1324 static void qeth_set_multiple_write_queues(struct qeth_card *card) in qeth_set_multiple_write_queues() argument
1326 if ((atomic_read(&card->qdio.state) != QETH_QDIO_UNINITIALIZED) && in qeth_set_multiple_write_queues()
1327 (card->qdio.no_out_queues == 1)) { in qeth_set_multiple_write_queues()
1328 qeth_free_qdio_buffers(card); in qeth_set_multiple_write_queues()
1329 card->qdio.default_out_queue = 2; in qeth_set_multiple_write_queues()
1331 card->qdio.no_out_queues = 4; in qeth_set_multiple_write_queues()
1334 static void qeth_update_from_chp_desc(struct qeth_card *card) in qeth_update_from_chp_desc() argument
1350 ccwdev = card->data.ccwdev; in qeth_update_from_chp_desc()
1355 card->info.func_level = 0x4100 + chp_dsc->desc; in qeth_update_from_chp_desc()
1356 if (card->info.type == QETH_CARD_TYPE_IQD) in qeth_update_from_chp_desc()
1361 qeth_set_single_write_queues(card); in qeth_update_from_chp_desc()
1363 qeth_set_multiple_write_queues(card); in qeth_update_from_chp_desc()
1366 QETH_DBF_TEXT_(SETUP, 2, "nr:%x", card->qdio.no_out_queues); in qeth_update_from_chp_desc()
1367 QETH_DBF_TEXT_(SETUP, 2, "lvl:%02x", card->info.func_level); in qeth_update_from_chp_desc()
1370 static void qeth_init_qdio_info(struct qeth_card *card) in qeth_init_qdio_info() argument
1373 atomic_set(&card->qdio.state, QETH_QDIO_UNINITIALIZED); in qeth_init_qdio_info()
1375 card->qdio.in_buf_size = QETH_IN_BUF_SIZE_DEFAULT; in qeth_init_qdio_info()
1376 if (card->info.type == QETH_CARD_TYPE_IQD) in qeth_init_qdio_info()
1377 card->qdio.init_pool.buf_count = QETH_IN_BUF_COUNT_HSDEFAULT; in qeth_init_qdio_info()
1379 card->qdio.init_pool.buf_count = QETH_IN_BUF_COUNT_DEFAULT; in qeth_init_qdio_info()
1380 card->qdio.in_buf_pool.buf_count = card->qdio.init_pool.buf_count; in qeth_init_qdio_info()
1381 INIT_LIST_HEAD(&card->qdio.in_buf_pool.entry_list); in qeth_init_qdio_info()
1382 INIT_LIST_HEAD(&card->qdio.init_pool.entry_list); in qeth_init_qdio_info()
1385 static void qeth_set_intial_options(struct qeth_card *card) in qeth_set_intial_options() argument
1387 card->options.route4.type = NO_ROUTER; in qeth_set_intial_options()
1388 card->options.route6.type = NO_ROUTER; in qeth_set_intial_options()
1389 card->options.fake_broadcast = 0; in qeth_set_intial_options()
1390 card->options.add_hhlen = DEFAULT_ADD_HHLEN; in qeth_set_intial_options()
1391 card->options.performance_stats = 0; in qeth_set_intial_options()
1392 card->options.rx_sg_cb = QETH_RX_SG_CB; in qeth_set_intial_options()
1393 card->options.isolation = ISOLATION_MODE_NONE; in qeth_set_intial_options()
1394 card->options.cq = QETH_CQ_DISABLED; in qeth_set_intial_options()
1397 static int qeth_do_start_thread(struct qeth_card *card, unsigned long thread) in qeth_do_start_thread() argument
1402 spin_lock_irqsave(&card->thread_mask_lock, flags); in qeth_do_start_thread()
1403 QETH_CARD_TEXT_(card, 4, " %02x%02x%02x", in qeth_do_start_thread()
1404 (u8) card->thread_start_mask, in qeth_do_start_thread()
1405 (u8) card->thread_allowed_mask, in qeth_do_start_thread()
1406 (u8) card->thread_running_mask); in qeth_do_start_thread()
1407 rc = (card->thread_start_mask & thread); in qeth_do_start_thread()
1408 spin_unlock_irqrestore(&card->thread_mask_lock, flags); in qeth_do_start_thread()
1415 struct qeth_card *card = container_of(work, struct qeth_card, in qeth_start_kernel_thread() local
1417 QETH_CARD_TEXT(card , 2, "strthrd"); in qeth_start_kernel_thread()
1419 if (card->read.state != CH_STATE_UP && in qeth_start_kernel_thread()
1420 card->write.state != CH_STATE_UP) in qeth_start_kernel_thread()
1422 if (qeth_do_start_thread(card, QETH_RECOVER_THREAD)) { in qeth_start_kernel_thread()
1423 ts = kthread_run(card->discipline->recover, (void *)card, in qeth_start_kernel_thread()
1426 qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD); in qeth_start_kernel_thread()
1427 qeth_clear_thread_running_bit(card, in qeth_start_kernel_thread()
1433 static int qeth_setup_card(struct qeth_card *card) in qeth_setup_card() argument
1437 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *)); in qeth_setup_card()
1439 card->read.state = CH_STATE_DOWN; in qeth_setup_card()
1440 card->write.state = CH_STATE_DOWN; in qeth_setup_card()
1441 card->data.state = CH_STATE_DOWN; in qeth_setup_card()
1442 card->state = CARD_STATE_DOWN; in qeth_setup_card()
1443 card->lan_online = 0; in qeth_setup_card()
1444 card->read_or_write_problem = 0; in qeth_setup_card()
1445 card->dev = NULL; in qeth_setup_card()
1446 spin_lock_init(&card->vlanlock); in qeth_setup_card()
1447 spin_lock_init(&card->mclock); in qeth_setup_card()
1448 spin_lock_init(&card->lock); in qeth_setup_card()
1449 spin_lock_init(&card->ip_lock); in qeth_setup_card()
1450 spin_lock_init(&card->thread_mask_lock); in qeth_setup_card()
1451 mutex_init(&card->conf_mutex); in qeth_setup_card()
1452 mutex_init(&card->discipline_mutex); in qeth_setup_card()
1453 card->thread_start_mask = 0; in qeth_setup_card()
1454 card->thread_allowed_mask = 0; in qeth_setup_card()
1455 card->thread_running_mask = 0; in qeth_setup_card()
1456 INIT_WORK(&card->kernel_thread_starter, qeth_start_kernel_thread); in qeth_setup_card()
1457 INIT_LIST_HEAD(&card->ip_list); in qeth_setup_card()
1458 INIT_LIST_HEAD(card->ip_tbd_list); in qeth_setup_card()
1459 INIT_LIST_HEAD(&card->cmd_waiter_list); in qeth_setup_card()
1460 init_waitqueue_head(&card->wait_q); in qeth_setup_card()
1462 qeth_set_intial_options(card); in qeth_setup_card()
1464 INIT_LIST_HEAD(&card->ipato.entries); in qeth_setup_card()
1465 card->ipato.enabled = 0; in qeth_setup_card()
1466 card->ipato.invert4 = 0; in qeth_setup_card()
1467 card->ipato.invert6 = 0; in qeth_setup_card()
1469 qeth_init_qdio_info(card); in qeth_setup_card()
1470 INIT_DELAYED_WORK(&card->buffer_reclaim_work, qeth_buffer_reclaim_work); in qeth_setup_card()
1471 INIT_WORK(&card->close_dev_work, qeth_close_dev_handler); in qeth_setup_card()
1477 struct qeth_card *card = container_of(slr, struct qeth_card, in qeth_core_sl_print() local
1479 if (card->info.mcl_level[0]) in qeth_core_sl_print()
1481 CARD_BUS_ID(card), card->info.mcl_level); in qeth_core_sl_print()
1486 struct qeth_card *card; in qeth_alloc_card() local
1489 card = kzalloc(sizeof(struct qeth_card), GFP_DMA|GFP_KERNEL); in qeth_alloc_card()
1490 if (!card) in qeth_alloc_card()
1492 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *)); in qeth_alloc_card()
1493 card->ip_tbd_list = kzalloc(sizeof(struct list_head), GFP_KERNEL); in qeth_alloc_card()
1494 if (!card->ip_tbd_list) { in qeth_alloc_card()
1498 if (qeth_setup_channel(&card->read)) in qeth_alloc_card()
1500 if (qeth_setup_channel(&card->write)) in qeth_alloc_card()
1502 card->options.layer2 = -1; in qeth_alloc_card()
1503 card->qeth_service_level.seq_print = qeth_core_sl_print; in qeth_alloc_card()
1504 register_service_level(&card->qeth_service_level); in qeth_alloc_card()
1505 return card; in qeth_alloc_card()
1508 qeth_clean_channel(&card->read); in qeth_alloc_card()
1510 kfree(card->ip_tbd_list); in qeth_alloc_card()
1512 kfree(card); in qeth_alloc_card()
1517 static int qeth_determine_card_type(struct qeth_card *card) in qeth_determine_card_type() argument
1523 card->qdio.do_prio_queueing = QETH_PRIOQ_DEFAULT; in qeth_determine_card_type()
1524 card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; in qeth_determine_card_type()
1526 if ((CARD_RDEV(card)->id.dev_type == in qeth_determine_card_type()
1528 (CARD_RDEV(card)->id.dev_model == in qeth_determine_card_type()
1530 card->info.type = known_devices[i][QETH_DEV_MODEL_IND]; in qeth_determine_card_type()
1531 card->qdio.no_out_queues = in qeth_determine_card_type()
1533 card->qdio.no_in_queues = 1; in qeth_determine_card_type()
1534 card->info.is_multicast_different = in qeth_determine_card_type()
1536 qeth_update_from_chp_desc(card); in qeth_determine_card_type()
1541 card->info.type = QETH_CARD_TYPE_UNKNOWN; in qeth_determine_card_type()
1542 dev_err(&card->gdev->dev, "The adapter hardware is of an " in qeth_determine_card_type()
1550 struct qeth_card *card; in qeth_clear_channel() local
1553 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_clear_channel()
1554 QETH_CARD_TEXT(card, 3, "clearch"); in qeth_clear_channel()
1561 rc = wait_event_interruptible_timeout(card->wait_q, in qeth_clear_channel()
1574 struct qeth_card *card; in qeth_halt_channel() local
1577 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_halt_channel()
1578 QETH_CARD_TEXT(card, 3, "haltch"); in qeth_halt_channel()
1585 rc = wait_event_interruptible_timeout(card->wait_q, in qeth_halt_channel()
1594 static int qeth_halt_channels(struct qeth_card *card) in qeth_halt_channels() argument
1598 QETH_CARD_TEXT(card, 3, "haltchs"); in qeth_halt_channels()
1599 rc1 = qeth_halt_channel(&card->read); in qeth_halt_channels()
1600 rc2 = qeth_halt_channel(&card->write); in qeth_halt_channels()
1601 rc3 = qeth_halt_channel(&card->data); in qeth_halt_channels()
1609 static int qeth_clear_channels(struct qeth_card *card) in qeth_clear_channels() argument
1613 QETH_CARD_TEXT(card, 3, "clearchs"); in qeth_clear_channels()
1614 rc1 = qeth_clear_channel(&card->read); in qeth_clear_channels()
1615 rc2 = qeth_clear_channel(&card->write); in qeth_clear_channels()
1616 rc3 = qeth_clear_channel(&card->data); in qeth_clear_channels()
1624 static int qeth_clear_halt_card(struct qeth_card *card, int halt) in qeth_clear_halt_card() argument
1628 QETH_CARD_TEXT(card, 3, "clhacrd"); in qeth_clear_halt_card()
1631 rc = qeth_halt_channels(card); in qeth_clear_halt_card()
1634 return qeth_clear_channels(card); in qeth_clear_halt_card()
1637 int qeth_qdio_clear_card(struct qeth_card *card, int use_halt) in qeth_qdio_clear_card() argument
1641 QETH_CARD_TEXT(card, 3, "qdioclr"); in qeth_qdio_clear_card()
1642 switch (atomic_cmpxchg(&card->qdio.state, QETH_QDIO_ESTABLISHED, in qeth_qdio_clear_card()
1645 if (card->info.type == QETH_CARD_TYPE_IQD) in qeth_qdio_clear_card()
1646 rc = qdio_shutdown(CARD_DDEV(card), in qeth_qdio_clear_card()
1649 rc = qdio_shutdown(CARD_DDEV(card), in qeth_qdio_clear_card()
1652 QETH_CARD_TEXT_(card, 3, "1err%d", rc); in qeth_qdio_clear_card()
1653 qdio_free(CARD_DDEV(card)); in qeth_qdio_clear_card()
1654 atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED); in qeth_qdio_clear_card()
1661 rc = qeth_clear_halt_card(card, use_halt); in qeth_qdio_clear_card()
1663 QETH_CARD_TEXT_(card, 3, "2err%d", rc); in qeth_qdio_clear_card()
1664 card->state = CARD_STATE_DOWN; in qeth_qdio_clear_card()
1669 static int qeth_read_conf_data(struct qeth_card *card, void **buffer, in qeth_read_conf_data() argument
1675 struct qeth_channel *channel = &card->data; in qeth_read_conf_data()
1699 wait_event(card->wait_q, in qeth_read_conf_data()
1717 static void qeth_configure_unitaddr(struct qeth_card *card, char *prcd) in qeth_configure_unitaddr() argument
1720 card->info.chpid = prcd[30]; in qeth_configure_unitaddr()
1721 card->info.unit_addr2 = prcd[31]; in qeth_configure_unitaddr()
1722 card->info.cula = prcd[63]; in qeth_configure_unitaddr()
1723 card->info.guestlan = ((prcd[0x10] == _ascebc['V']) && in qeth_configure_unitaddr()
1727 static void qeth_configure_blkt_default(struct qeth_card *card, char *prcd) in qeth_configure_blkt_default() argument
1733 card->info.blkt.time_total = 250; in qeth_configure_blkt_default()
1734 card->info.blkt.inter_packet = 5; in qeth_configure_blkt_default()
1735 card->info.blkt.inter_packet_jumbo = 15; in qeth_configure_blkt_default()
1737 card->info.blkt.time_total = 0; in qeth_configure_blkt_default()
1738 card->info.blkt.inter_packet = 0; in qeth_configure_blkt_default()
1739 card->info.blkt.inter_packet_jumbo = 0; in qeth_configure_blkt_default()
1743 static void qeth_init_tokens(struct qeth_card *card) in qeth_init_tokens() argument
1745 card->token.issuer_rm_w = 0x00010103UL; in qeth_init_tokens()
1746 card->token.cm_filter_w = 0x00010108UL; in qeth_init_tokens()
1747 card->token.cm_connection_w = 0x0001010aUL; in qeth_init_tokens()
1748 card->token.ulp_filter_w = 0x0001010bUL; in qeth_init_tokens()
1749 card->token.ulp_connection_w = 0x0001010dUL; in qeth_init_tokens()
1752 static void qeth_init_func_level(struct qeth_card *card) in qeth_init_func_level() argument
1754 switch (card->info.type) { in qeth_init_func_level()
1756 card->info.func_level = QETH_IDX_FUNC_LEVEL_IQD; in qeth_init_func_level()
1760 card->info.func_level = QETH_IDX_FUNC_LEVEL_OSD; in qeth_init_func_level()
1774 struct qeth_card *card; in qeth_idx_activate_get_answer() local
1777 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_idx_activate_get_answer()
1784 wait_event(card->wait_q, in qeth_idx_activate_get_answer()
1796 wake_up(&card->wait_q); in qeth_idx_activate_get_answer()
1799 rc = wait_event_interruptible_timeout(card->wait_q, in qeth_idx_activate_get_answer()
1816 struct qeth_card *card; in qeth_idx_activate_channel() local
1824 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_idx_activate_channel()
1833 if (channel == &card->write) { in qeth_idx_activate_channel()
1836 &card->seqno.trans_hdr, QETH_SEQ_NO_LENGTH); in qeth_idx_activate_channel()
1837 card->seqno.trans_hdr++; in qeth_idx_activate_channel()
1841 &card->seqno.trans_hdr, QETH_SEQ_NO_LENGTH); in qeth_idx_activate_channel()
1843 tmp = ((__u8)card->info.portno) | 0x80; in qeth_idx_activate_channel()
1846 &card->token.issuer_rm_w, QETH_MPC_TOKEN_LENGTH); in qeth_idx_activate_channel()
1848 &card->info.func_level, sizeof(__u16)); in qeth_idx_activate_channel()
1849 ccw_device_get_id(CARD_DDEV(card), &temp_devid); in qeth_idx_activate_channel()
1851 temp = (card->info.cula << 8) + card->info.unit_addr2; in qeth_idx_activate_channel()
1854 wait_event(card->wait_q, in qeth_idx_activate_channel()
1867 wake_up(&card->wait_q); in qeth_idx_activate_channel()
1870 rc = wait_event_interruptible_timeout(card->wait_q, in qeth_idx_activate_channel()
1898 struct qeth_card *card; in qeth_idx_write_cb() local
1907 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_idx_write_cb()
1911 dev_err(&card->write.ccwdev->dev, in qeth_idx_write_cb()
1917 dev_name(&card->write.ccwdev->dev)); in qeth_idx_write_cb()
1921 if ((temp & ~0x0100) != qeth_peer_func_level(card->info.func_level)) { in qeth_idx_write_cb()
1924 "0x%x)\n", dev_name(&card->write.ccwdev->dev), in qeth_idx_write_cb()
1925 card->info.func_level, temp); in qeth_idx_write_cb()
1936 struct qeth_card *card; in qeth_idx_read_cb() local
1945 card = CARD_FROM_CDEV(channel->ccwdev); in qeth_idx_read_cb()
1946 if (qeth_check_idx_response(card, iob->data)) in qeth_idx_read_cb()
1952 dev_err(&card->write.ccwdev->dev, in qeth_idx_read_cb()
1958 dev_err(&card->read.ccwdev->dev, in qeth_idx_read_cb()
1965 dev_name(&card->read.ccwdev->dev)); in qeth_idx_read_cb()
1967 QETH_CARD_TEXT_(card, 2, "idxread%c", in qeth_idx_read_cb()
1977 (card->info.type == QETH_CARD_TYPE_OSD)) in qeth_idx_read_cb()
1978 card->info.portname_required = 1; in qeth_idx_read_cb()
1981 if (temp != qeth_peer_func_level(card->info.func_level)) { in qeth_idx_read_cb()
1984 dev_name(&card->read.ccwdev->dev), in qeth_idx_read_cb()
1985 card->info.func_level, temp); in qeth_idx_read_cb()
1988 memcpy(&card->token.issuer_rm_r, in qeth_idx_read_cb()
1991 memcpy(&card->info.mcl_level[0], in qeth_idx_read_cb()
1998 void qeth_prepare_control_data(struct qeth_card *card, int len, in qeth_prepare_control_data() argument
2001 qeth_setup_ccw(&card->write, iob->data, len); in qeth_prepare_control_data()
2005 &card->seqno.trans_hdr, QETH_SEQ_NO_LENGTH); in qeth_prepare_control_data()
2006 card->seqno.trans_hdr++; in qeth_prepare_control_data()
2008 &card->seqno.pdu_hdr, QETH_SEQ_NO_LENGTH); in qeth_prepare_control_data()
2009 card->seqno.pdu_hdr++; in qeth_prepare_control_data()
2011 &card->seqno.pdu_hdr_ack, QETH_SEQ_NO_LENGTH); in qeth_prepare_control_data()
2016 int qeth_send_control_data(struct qeth_card *card, int len, in qeth_send_control_data() argument
2028 QETH_CARD_TEXT(card, 2, "sendctl"); in qeth_send_control_data()
2030 if (card->read_or_write_problem) { in qeth_send_control_data()
2034 reply = qeth_alloc_reply(card); in qeth_send_control_data()
2040 if (card->state == CARD_STATE_DOWN) in qeth_send_control_data()
2043 reply->seqno = card->seqno.ipa++; in qeth_send_control_data()
2045 spin_lock_irqsave(&card->lock, flags); in qeth_send_control_data()
2046 list_add_tail(&reply->list, &card->cmd_waiter_list); in qeth_send_control_data()
2047 spin_unlock_irqrestore(&card->lock, flags); in qeth_send_control_data()
2050 while (atomic_cmpxchg(&card->write.irq_pending, 0, 1)) ; in qeth_send_control_data()
2051 qeth_prepare_control_data(card, len, iob); in qeth_send_control_data()
2059 QETH_CARD_TEXT(card, 6, "noirqpnd"); in qeth_send_control_data()
2060 spin_lock_irqsave(get_ccwdev_lock(card->write.ccwdev), flags); in qeth_send_control_data()
2061 rc = ccw_device_start(card->write.ccwdev, &card->write.ccw, in qeth_send_control_data()
2063 spin_unlock_irqrestore(get_ccwdev_lock(card->write.ccwdev), flags); in qeth_send_control_data()
2067 dev_name(&card->write.ccwdev->dev), rc); in qeth_send_control_data()
2068 QETH_CARD_TEXT_(card, 2, " err%d", rc); in qeth_send_control_data()
2069 spin_lock_irqsave(&card->lock, flags); in qeth_send_control_data()
2072 spin_unlock_irqrestore(&card->lock, flags); in qeth_send_control_data()
2074 atomic_set(&card->write.irq_pending, 0); in qeth_send_control_data()
2075 wake_up(&card->wait_q); in qeth_send_control_data()
2103 spin_lock_irqsave(&reply->card->lock, flags); in qeth_send_control_data()
2105 spin_unlock_irqrestore(&reply->card->lock, flags); in qeth_send_control_data()
2108 atomic_set(&card->write.irq_pending, 0); in qeth_send_control_data()
2110 card->write.buf_no = (card->write.buf_no + 1) % QETH_CMD_BUFFER_NO; in qeth_send_control_data()
2117 static int qeth_cm_enable_cb(struct qeth_card *card, struct qeth_reply *reply, in qeth_cm_enable_cb() argument
2125 memcpy(&card->token.cm_filter_r, in qeth_cm_enable_cb()
2132 static int qeth_cm_enable(struct qeth_card *card) in qeth_cm_enable() argument
2139 iob = qeth_wait_for_buffer(&card->write); in qeth_cm_enable()
2142 &card->token.issuer_rm_r, QETH_MPC_TOKEN_LENGTH); in qeth_cm_enable()
2144 &card->token.cm_filter_w, QETH_MPC_TOKEN_LENGTH); in qeth_cm_enable()
2146 rc = qeth_send_control_data(card, CM_ENABLE_SIZE, iob, in qeth_cm_enable()
2151 static int qeth_cm_setup_cb(struct qeth_card *card, struct qeth_reply *reply, in qeth_cm_setup_cb() argument
2160 memcpy(&card->token.cm_connection_r, in qeth_cm_setup_cb()
2167 static int qeth_cm_setup(struct qeth_card *card) in qeth_cm_setup() argument
2174 iob = qeth_wait_for_buffer(&card->write); in qeth_cm_setup()
2177 &card->token.issuer_rm_r, QETH_MPC_TOKEN_LENGTH); in qeth_cm_setup()
2179 &card->token.cm_connection_w, QETH_MPC_TOKEN_LENGTH); in qeth_cm_setup()
2181 &card->token.cm_filter_r, QETH_MPC_TOKEN_LENGTH); in qeth_cm_setup()
2182 rc = qeth_send_control_data(card, CM_SETUP_SIZE, iob, in qeth_cm_setup()
2188 static inline int qeth_get_initial_mtu_for_card(struct qeth_card *card) in qeth_get_initial_mtu_for_card() argument
2190 switch (card->info.type) { in qeth_get_initial_mtu_for_card()
2194 return card->info.max_mtu; in qeth_get_initial_mtu_for_card()
2196 switch (card->info.link_type) { in qeth_get_initial_mtu_for_card()
2227 static inline int qeth_mtu_is_valid(struct qeth_card *card, int mtu) in qeth_mtu_is_valid() argument
2229 switch (card->info.type) { in qeth_mtu_is_valid()
2235 (mtu <= card->info.max_mtu)); in qeth_mtu_is_valid()
2243 static int qeth_ulp_enable_cb(struct qeth_card *card, struct qeth_reply *reply, in qeth_ulp_enable_cb() argument
2255 memcpy(&card->token.ulp_filter_r, in qeth_ulp_enable_cb()
2258 if (card->info.type == QETH_CARD_TYPE_IQD) { in qeth_ulp_enable_cb()
2266 if (card->info.initial_mtu && (card->info.initial_mtu != mtu)) { in qeth_ulp_enable_cb()
2268 if (card->dev && in qeth_ulp_enable_cb()
2269 ((card->dev->mtu == card->info.initial_mtu) || in qeth_ulp_enable_cb()
2270 (card->dev->mtu > mtu))) in qeth_ulp_enable_cb()
2271 card->dev->mtu = mtu; in qeth_ulp_enable_cb()
2272 qeth_free_qdio_buffers(card); in qeth_ulp_enable_cb()
2274 card->info.initial_mtu = mtu; in qeth_ulp_enable_cb()
2275 card->info.max_mtu = mtu; in qeth_ulp_enable_cb()
2276 card->qdio.in_buf_size = mtu + 2 * PAGE_SIZE; in qeth_ulp_enable_cb()
2278 card->info.initial_mtu = qeth_get_initial_mtu_for_card(card); in qeth_ulp_enable_cb()
2279 card->info.max_mtu = *(__u16 *)QETH_ULP_ENABLE_RESP_MAX_MTU( in qeth_ulp_enable_cb()
2281 card->qdio.in_buf_size = QETH_IN_BUF_SIZE_DEFAULT; in qeth_ulp_enable_cb()
2288 card->info.link_type = link_type; in qeth_ulp_enable_cb()
2290 card->info.link_type = 0; in qeth_ulp_enable_cb()
2291 QETH_DBF_TEXT_(SETUP, 2, "link%d", card->info.link_type); in qeth_ulp_enable_cb()
2296 static int qeth_ulp_enable(struct qeth_card *card) in qeth_ulp_enable() argument
2305 iob = qeth_wait_for_buffer(&card->write); in qeth_ulp_enable()
2309 (__u8) card->info.portno; in qeth_ulp_enable()
2310 if (card->options.layer2) in qeth_ulp_enable()
2311 if (card->info.type == QETH_CARD_TYPE_OSN) in qeth_ulp_enable()
2320 &card->token.cm_connection_r, QETH_MPC_TOKEN_LENGTH); in qeth_ulp_enable()
2322 &card->token.ulp_filter_w, QETH_MPC_TOKEN_LENGTH); in qeth_ulp_enable()
2324 card->info.portname, 9); in qeth_ulp_enable()
2325 rc = qeth_send_control_data(card, ULP_ENABLE_SIZE, iob, in qeth_ulp_enable()
2331 static int qeth_ulp_setup_cb(struct qeth_card *card, struct qeth_reply *reply, in qeth_ulp_setup_cb() argument
2339 memcpy(&card->token.ulp_connection_r, in qeth_ulp_setup_cb()
2345 dev_err(&card->gdev->dev, "A connection could not be " in qeth_ulp_setup_cb()
2353 static int qeth_ulp_setup(struct qeth_card *card) in qeth_ulp_setup() argument
2362 iob = qeth_wait_for_buffer(&card->write); in qeth_ulp_setup()
2366 &card->token.cm_connection_r, QETH_MPC_TOKEN_LENGTH); in qeth_ulp_setup()
2368 &card->token.ulp_connection_w, QETH_MPC_TOKEN_LENGTH); in qeth_ulp_setup()
2370 &card->token.ulp_filter_r, QETH_MPC_TOKEN_LENGTH); in qeth_ulp_setup()
2372 ccw_device_get_id(CARD_DDEV(card), &dev_id); in qeth_ulp_setup()
2374 temp = (card->info.cula << 8) + card->info.unit_addr2; in qeth_ulp_setup()
2376 rc = qeth_send_control_data(card, ULP_SETUP_SIZE, iob, in qeth_ulp_setup()
2402 QETH_CARD_TEXT_(q->card, 2, "nbs%d", bidx); in qeth_init_qdio_out_buf()
2403 QETH_CARD_TEXT_(q->card, 2, "%lx", (long) newbuf); in qeth_init_qdio_out_buf()
2404 QETH_CARD_TEXT_(q->card, 2, "%lx", in qeth_init_qdio_out_buf()
2412 static int qeth_alloc_qdio_buffers(struct qeth_card *card) in qeth_alloc_qdio_buffers() argument
2418 if (atomic_cmpxchg(&card->qdio.state, QETH_QDIO_UNINITIALIZED, in qeth_alloc_qdio_buffers()
2422 card->qdio.in_q = kzalloc(sizeof(struct qeth_qdio_q), in qeth_alloc_qdio_buffers()
2424 if (!card->qdio.in_q) in qeth_alloc_qdio_buffers()
2427 QETH_DBF_HEX(SETUP, 2, &card->qdio.in_q, sizeof(void *)); in qeth_alloc_qdio_buffers()
2428 memset(card->qdio.in_q, 0, sizeof(struct qeth_qdio_q)); in qeth_alloc_qdio_buffers()
2431 card->qdio.in_q->bufs[i].buffer = in qeth_alloc_qdio_buffers()
2432 &card->qdio.in_q->qdio_bufs[i]; in qeth_alloc_qdio_buffers()
2433 card->qdio.in_q->bufs[i].rx_skb = NULL; in qeth_alloc_qdio_buffers()
2436 if (qeth_alloc_buffer_pool(card)) in qeth_alloc_qdio_buffers()
2440 card->qdio.out_qs = in qeth_alloc_qdio_buffers()
2441 kzalloc(card->qdio.no_out_queues * in qeth_alloc_qdio_buffers()
2443 if (!card->qdio.out_qs) in qeth_alloc_qdio_buffers()
2445 for (i = 0; i < card->qdio.no_out_queues; ++i) { in qeth_alloc_qdio_buffers()
2446 card->qdio.out_qs[i] = kzalloc(sizeof(struct qeth_qdio_out_q), in qeth_alloc_qdio_buffers()
2448 if (!card->qdio.out_qs[i]) in qeth_alloc_qdio_buffers()
2451 QETH_DBF_HEX(SETUP, 2, &card->qdio.out_qs[i], sizeof(void *)); in qeth_alloc_qdio_buffers()
2452 card->qdio.out_qs[i]->queue_no = i; in qeth_alloc_qdio_buffers()
2455 WARN_ON(card->qdio.out_qs[i]->bufs[j] != NULL); in qeth_alloc_qdio_buffers()
2456 if (qeth_init_qdio_out_buf(card->qdio.out_qs[i], j)) in qeth_alloc_qdio_buffers()
2462 if (qeth_alloc_cq(card)) in qeth_alloc_qdio_buffers()
2471 card->qdio.out_qs[i]->bufs[j]); in qeth_alloc_qdio_buffers()
2472 card->qdio.out_qs[i]->bufs[j] = NULL; in qeth_alloc_qdio_buffers()
2476 kfree(card->qdio.out_qs[--i]); in qeth_alloc_qdio_buffers()
2477 qeth_clear_outq_buffers(card->qdio.out_qs[i], 1); in qeth_alloc_qdio_buffers()
2479 kfree(card->qdio.out_qs); in qeth_alloc_qdio_buffers()
2480 card->qdio.out_qs = NULL; in qeth_alloc_qdio_buffers()
2482 qeth_free_buffer_pool(card); in qeth_alloc_qdio_buffers()
2484 kfree(card->qdio.in_q); in qeth_alloc_qdio_buffers()
2485 card->qdio.in_q = NULL; in qeth_alloc_qdio_buffers()
2487 atomic_set(&card->qdio.state, QETH_QDIO_UNINITIALIZED); in qeth_alloc_qdio_buffers()
2491 static void qeth_create_qib_param_field(struct qeth_card *card, in qeth_create_qib_param_field() argument
2499 *((unsigned int *) (¶m_field[4])) = QETH_PCI_THRESHOLD_A(card); in qeth_create_qib_param_field()
2500 *((unsigned int *) (¶m_field[8])) = QETH_PCI_THRESHOLD_B(card); in qeth_create_qib_param_field()
2501 *((unsigned int *) (¶m_field[12])) = QETH_PCI_TIMER_VALUE(card); in qeth_create_qib_param_field()
2504 static void qeth_create_qib_param_field_blkt(struct qeth_card *card, in qeth_create_qib_param_field_blkt() argument
2511 *((unsigned int *) (¶m_field[20])) = card->info.blkt.time_total; in qeth_create_qib_param_field_blkt()
2512 *((unsigned int *) (¶m_field[24])) = card->info.blkt.inter_packet; in qeth_create_qib_param_field_blkt()
2514 card->info.blkt.inter_packet_jumbo; in qeth_create_qib_param_field_blkt()
2517 static int qeth_qdio_activate(struct qeth_card *card) in qeth_qdio_activate() argument
2520 return qdio_activate(CARD_DDEV(card)); in qeth_qdio_activate()
2523 static int qeth_dm_act(struct qeth_card *card) in qeth_dm_act() argument
2530 iob = qeth_wait_for_buffer(&card->write); in qeth_dm_act()
2534 &card->token.cm_connection_r, QETH_MPC_TOKEN_LENGTH); in qeth_dm_act()
2536 &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH); in qeth_dm_act()
2537 rc = qeth_send_control_data(card, DM_ACT_SIZE, iob, NULL, NULL); in qeth_dm_act()
2541 static int qeth_mpc_initialize(struct qeth_card *card) in qeth_mpc_initialize() argument
2547 rc = qeth_issue_next_read(card); in qeth_mpc_initialize()
2552 rc = qeth_cm_enable(card); in qeth_mpc_initialize()
2557 rc = qeth_cm_setup(card); in qeth_mpc_initialize()
2562 rc = qeth_ulp_enable(card); in qeth_mpc_initialize()
2567 rc = qeth_ulp_setup(card); in qeth_mpc_initialize()
2572 rc = qeth_alloc_qdio_buffers(card); in qeth_mpc_initialize()
2577 rc = qeth_qdio_establish(card); in qeth_mpc_initialize()
2580 qeth_free_qdio_buffers(card); in qeth_mpc_initialize()
2583 rc = qeth_qdio_activate(card); in qeth_mpc_initialize()
2588 rc = qeth_dm_act(card); in qeth_mpc_initialize()
2596 qeth_qdio_clear_card(card, card->info.type != QETH_CARD_TYPE_IQD); in qeth_mpc_initialize()
2600 static void qeth_print_status_with_portname(struct qeth_card *card) in qeth_print_status_with_portname() argument
2605 sprintf(dbf_text, "%s", card->info.portname + 1); in qeth_print_status_with_portname()
2610 dev_info(&card->gdev->dev, "Device is a%s card%s%s%s\n" in qeth_print_status_with_portname()
2612 qeth_get_cardname(card), in qeth_print_status_with_portname()
2613 (card->info.mcl_level[0]) ? " (level: " : "", in qeth_print_status_with_portname()
2614 (card->info.mcl_level[0]) ? card->info.mcl_level : "", in qeth_print_status_with_portname()
2615 (card->info.mcl_level[0]) ? ")" : "", in qeth_print_status_with_portname()
2616 qeth_get_cardname_short(card), in qeth_print_status_with_portname()
2621 static void qeth_print_status_no_portname(struct qeth_card *card) in qeth_print_status_no_portname() argument
2623 if (card->info.portname[0]) in qeth_print_status_no_portname()
2624 dev_info(&card->gdev->dev, "Device is a%s " in qeth_print_status_no_portname()
2627 qeth_get_cardname(card), in qeth_print_status_no_portname()
2628 (card->info.mcl_level[0]) ? " (level: " : "", in qeth_print_status_no_portname()
2629 (card->info.mcl_level[0]) ? card->info.mcl_level : "", in qeth_print_status_no_portname()
2630 (card->info.mcl_level[0]) ? ")" : "", in qeth_print_status_no_portname()
2631 qeth_get_cardname_short(card)); in qeth_print_status_no_portname()
2633 dev_info(&card->gdev->dev, "Device is a%s " in qeth_print_status_no_portname()
2635 qeth_get_cardname(card), in qeth_print_status_no_portname()
2636 (card->info.mcl_level[0]) ? " (level: " : "", in qeth_print_status_no_portname()
2637 (card->info.mcl_level[0]) ? card->info.mcl_level : "", in qeth_print_status_no_portname()
2638 (card->info.mcl_level[0]) ? ")" : "", in qeth_print_status_no_portname()
2639 qeth_get_cardname_short(card)); in qeth_print_status_no_portname()
2642 void qeth_print_status_message(struct qeth_card *card) in qeth_print_status_message() argument
2644 switch (card->info.type) { in qeth_print_status_message()
2652 if (!card->info.mcl_level[0]) { in qeth_print_status_message()
2653 sprintf(card->info.mcl_level, "%02x%02x", in qeth_print_status_message()
2654 card->info.mcl_level[2], in qeth_print_status_message()
2655 card->info.mcl_level[3]); in qeth_print_status_message()
2657 card->info.mcl_level[QETH_MCL_LENGTH] = 0; in qeth_print_status_message()
2662 if ((card->info.guestlan) || in qeth_print_status_message()
2663 (card->info.mcl_level[0] & 0x80)) { in qeth_print_status_message()
2664 card->info.mcl_level[0] = (char) _ebcasc[(__u8) in qeth_print_status_message()
2665 card->info.mcl_level[0]]; in qeth_print_status_message()
2666 card->info.mcl_level[1] = (char) _ebcasc[(__u8) in qeth_print_status_message()
2667 card->info.mcl_level[1]]; in qeth_print_status_message()
2668 card->info.mcl_level[2] = (char) _ebcasc[(__u8) in qeth_print_status_message()
2669 card->info.mcl_level[2]]; in qeth_print_status_message()
2670 card->info.mcl_level[3] = (char) _ebcasc[(__u8) in qeth_print_status_message()
2671 card->info.mcl_level[3]]; in qeth_print_status_message()
2672 card->info.mcl_level[QETH_MCL_LENGTH] = 0; in qeth_print_status_message()
2676 memset(&card->info.mcl_level[0], 0, QETH_MCL_LENGTH + 1); in qeth_print_status_message()
2678 if (card->info.portname_required) in qeth_print_status_message()
2679 qeth_print_status_with_portname(card); in qeth_print_status_message()
2681 qeth_print_status_no_portname(card); in qeth_print_status_message()
2685 static void qeth_initialize_working_pool_list(struct qeth_card *card) in qeth_initialize_working_pool_list() argument
2689 QETH_CARD_TEXT(card, 5, "inwrklst"); in qeth_initialize_working_pool_list()
2692 &card->qdio.init_pool.entry_list, init_list) { in qeth_initialize_working_pool_list()
2693 qeth_put_buffer_pool_entry(card, entry); in qeth_initialize_working_pool_list()
2698 struct qeth_card *card) in qeth_find_free_buffer_pool_entry() argument
2705 if (list_empty(&card->qdio.in_buf_pool.entry_list)) in qeth_find_free_buffer_pool_entry()
2708 list_for_each(plh, &card->qdio.in_buf_pool.entry_list) { in qeth_find_free_buffer_pool_entry()
2711 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) { in qeth_find_free_buffer_pool_entry()
2724 entry = list_entry(card->qdio.in_buf_pool.entry_list.next, in qeth_find_free_buffer_pool_entry()
2726 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) { in qeth_find_free_buffer_pool_entry()
2734 if (card->options.performance_stats) in qeth_find_free_buffer_pool_entry()
2735 card->perf_stats.sg_alloc_page_rx++; in qeth_find_free_buffer_pool_entry()
2743 static int qeth_init_input_buffer(struct qeth_card *card, in qeth_init_input_buffer() argument
2749 if ((card->options.cq == QETH_CQ_ENABLED) && (!buf->rx_skb)) { in qeth_init_input_buffer()
2755 pool_entry = qeth_find_free_buffer_pool_entry(card); in qeth_init_input_buffer()
2767 for (i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i) { in qeth_init_input_buffer()
2770 if (i == QETH_MAX_BUFFER_ELEMENTS(card) - 1) in qeth_init_input_buffer()
2779 int qeth_init_qdio_queues(struct qeth_card *card) in qeth_init_qdio_queues() argument
2787 memset(card->qdio.in_q->qdio_bufs, 0, in qeth_init_qdio_queues()
2789 qeth_initialize_working_pool_list(card); in qeth_init_qdio_queues()
2791 for (i = 0; i < card->qdio.in_buf_pool.buf_count - 1; ++i) in qeth_init_qdio_queues()
2792 qeth_init_input_buffer(card, &card->qdio.in_q->bufs[i]); in qeth_init_qdio_queues()
2793 card->qdio.in_q->next_buf_to_init = in qeth_init_qdio_queues()
2794 card->qdio.in_buf_pool.buf_count - 1; in qeth_init_qdio_queues()
2795 rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, 0, in qeth_init_qdio_queues()
2796 card->qdio.in_buf_pool.buf_count - 1); in qeth_init_qdio_queues()
2803 rc = qeth_cq_init(card); in qeth_init_qdio_queues()
2809 for (i = 0; i < card->qdio.no_out_queues; ++i) { in qeth_init_qdio_queues()
2810 memset(card->qdio.out_qs[i]->qdio_bufs, 0, in qeth_init_qdio_queues()
2813 qeth_clear_output_buffer(card->qdio.out_qs[i], in qeth_init_qdio_queues()
2814 card->qdio.out_qs[i]->bufs[j], in qeth_init_qdio_queues()
2817 card->qdio.out_qs[i]->card = card; in qeth_init_qdio_queues()
2818 card->qdio.out_qs[i]->next_buf_to_fill = 0; in qeth_init_qdio_queues()
2819 card->qdio.out_qs[i]->do_pack = 0; in qeth_init_qdio_queues()
2820 atomic_set(&card->qdio.out_qs[i]->used_buffers, 0); in qeth_init_qdio_queues()
2821 atomic_set(&card->qdio.out_qs[i]->set_pci_flags_count, 0); in qeth_init_qdio_queues()
2822 atomic_set(&card->qdio.out_qs[i]->state, in qeth_init_qdio_queues()
2839 static void qeth_fill_ipacmd_header(struct qeth_card *card, in qeth_fill_ipacmd_header() argument
2846 cmd->hdr.seqno = card->seqno.ipa; in qeth_fill_ipacmd_header()
2847 cmd->hdr.adapter_type = qeth_get_ipa_adp_type(card->info.link_type); in qeth_fill_ipacmd_header()
2848 cmd->hdr.rel_adapter_no = (__u8) card->info.portno; in qeth_fill_ipacmd_header()
2849 if (card->options.layer2) in qeth_fill_ipacmd_header()
2859 struct qeth_cmd_buffer *qeth_get_ipacmd_buffer(struct qeth_card *card, in qeth_get_ipacmd_buffer() argument
2865 iob = qeth_wait_for_buffer(&card->write); in qeth_get_ipacmd_buffer()
2867 qeth_fill_ipacmd_header(card, cmd, ipacmd, prot); in qeth_get_ipacmd_buffer()
2873 void qeth_prepare_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob, in qeth_prepare_ipa_cmd() argument
2879 &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH); in qeth_prepare_ipa_cmd()
2883 int qeth_send_ipa_cmd(struct qeth_card *card, struct qeth_cmd_buffer *iob, in qeth_send_ipa_cmd() argument
2891 QETH_CARD_TEXT(card, 4, "sendipa"); in qeth_send_ipa_cmd()
2893 if (card->options.layer2) in qeth_send_ipa_cmd()
2894 if (card->info.type == QETH_CARD_TYPE_OSN) in qeth_send_ipa_cmd()
2900 qeth_prepare_ipa_cmd(card, iob, prot_type); in qeth_send_ipa_cmd()
2901 rc = qeth_send_control_data(card, IPA_CMD_LENGTH, in qeth_send_ipa_cmd()
2904 qeth_clear_ipacmd_list(card); in qeth_send_ipa_cmd()
2905 qeth_schedule_recovery(card); in qeth_send_ipa_cmd()
2911 int qeth_send_startlan(struct qeth_card *card) in qeth_send_startlan() argument
2918 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_STARTLAN, 0); in qeth_send_startlan()
2919 rc = qeth_send_ipa_cmd(card, iob, NULL, NULL); in qeth_send_startlan()
2924 static int qeth_default_setadapterparms_cb(struct qeth_card *card, in qeth_default_setadapterparms_cb() argument
2929 QETH_CARD_TEXT(card, 4, "defadpcb"); in qeth_default_setadapterparms_cb()
2938 static int qeth_query_setadapterparms_cb(struct qeth_card *card, in qeth_query_setadapterparms_cb() argument
2943 QETH_CARD_TEXT(card, 3, "quyadpcb"); in qeth_query_setadapterparms_cb()
2947 card->info.link_type = in qeth_query_setadapterparms_cb()
2949 QETH_DBF_TEXT_(SETUP, 2, "lnk %d", card->info.link_type); in qeth_query_setadapterparms_cb()
2951 card->options.adp.supported_funcs = in qeth_query_setadapterparms_cb()
2953 return qeth_default_setadapterparms_cb(card, reply, (unsigned long)cmd); in qeth_query_setadapterparms_cb()
2956 static struct qeth_cmd_buffer *qeth_get_adapter_cmd(struct qeth_card *card, in qeth_get_adapter_cmd() argument
2962 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETADAPTERPARMS, in qeth_get_adapter_cmd()
2973 int qeth_query_setadapterparms(struct qeth_card *card) in qeth_query_setadapterparms() argument
2978 QETH_CARD_TEXT(card, 3, "queryadp"); in qeth_query_setadapterparms()
2979 iob = qeth_get_adapter_cmd(card, IPA_SETADP_QUERY_COMMANDS_SUPPORTED, in qeth_query_setadapterparms()
2981 rc = qeth_send_ipa_cmd(card, iob, qeth_query_setadapterparms_cb, NULL); in qeth_query_setadapterparms()
2986 static int qeth_query_ipassists_cb(struct qeth_card *card, in qeth_query_ipassists_cb() argument
2999 card->options.ipa4.supported_funcs |= IPA_SETADAPTERPARMS; in qeth_query_ipassists_cb()
3000 card->options.ipa6.supported_funcs |= IPA_SETADAPTERPARMS; in qeth_query_ipassists_cb()
3006 dev_name(&card->gdev->dev), in qeth_query_ipassists_cb()
3013 card->options.ipa4.supported_funcs = cmd->hdr.ipa_supported; in qeth_query_ipassists_cb()
3014 card->options.ipa4.enabled_funcs = cmd->hdr.ipa_enabled; in qeth_query_ipassists_cb()
3016 card->options.ipa6.supported_funcs = cmd->hdr.ipa_supported; in qeth_query_ipassists_cb()
3017 card->options.ipa6.enabled_funcs = cmd->hdr.ipa_enabled; in qeth_query_ipassists_cb()
3020 "\n", dev_name(&card->gdev->dev)); in qeth_query_ipassists_cb()
3024 int qeth_query_ipassists(struct qeth_card *card, enum qeth_prot_versions prot) in qeth_query_ipassists() argument
3030 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_QIPASSIST, prot); in qeth_query_ipassists()
3031 rc = qeth_send_ipa_cmd(card, iob, qeth_query_ipassists_cb, NULL); in qeth_query_ipassists()
3036 static int qeth_query_setdiagass_cb(struct qeth_card *card, in qeth_query_setdiagass_cb() argument
3045 QETH_CARD_TEXT_(card, 2, "diagq:%x", rc); in qeth_query_setdiagass_cb()
3047 card->info.diagass_support = cmd->data.diagass.ext; in qeth_query_setdiagass_cb()
3051 static int qeth_query_setdiagass(struct qeth_card *card) in qeth_query_setdiagass() argument
3057 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SET_DIAG_ASS, 0); in qeth_query_setdiagass()
3061 return qeth_send_ipa_cmd(card, iob, qeth_query_setdiagass_cb, NULL); in qeth_query_setdiagass()
3064 static void qeth_get_trap_id(struct qeth_card *card, struct qeth_trap_id *tid) in qeth_get_trap_id() argument
3072 tid->chpid = card->info.chpid; in qeth_get_trap_id()
3073 ccw_device_get_id(CARD_RDEV(card), &ccwid); in qeth_get_trap_id()
3089 static int qeth_hw_trap_cb(struct qeth_card *card, in qeth_hw_trap_cb() argument
3098 QETH_CARD_TEXT_(card, 2, "trapc:%x", rc); in qeth_hw_trap_cb()
3102 int qeth_hw_trap(struct qeth_card *card, enum qeth_diags_trap_action action) in qeth_hw_trap() argument
3108 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SET_DIAG_ASS, 0); in qeth_hw_trap()
3119 qeth_get_trap_id(card, in qeth_hw_trap()
3128 return qeth_send_ipa_cmd(card, iob, qeth_hw_trap_cb, NULL); in qeth_hw_trap()
3132 int qeth_check_qdio_errors(struct qeth_card *card, struct qdio_buffer *buf, in qeth_check_qdio_errors() argument
3136 QETH_CARD_TEXT(card, 2, dbftext); in qeth_check_qdio_errors()
3137 QETH_CARD_TEXT_(card, 2, " F15=%02X", in qeth_check_qdio_errors()
3139 QETH_CARD_TEXT_(card, 2, " F14=%02X", in qeth_check_qdio_errors()
3141 QETH_CARD_TEXT_(card, 2, " qerr=%X", qdio_error); in qeth_check_qdio_errors()
3143 card->stats.rx_dropped++; in qeth_check_qdio_errors()
3154 struct qeth_card *card = container_of(work, struct qeth_card, in qeth_buffer_reclaim_work() local
3157 QETH_CARD_TEXT_(card, 2, "brw:%x", card->reclaim_index); in qeth_buffer_reclaim_work()
3158 qeth_queue_input_buffer(card, card->reclaim_index); in qeth_buffer_reclaim_work()
3161 void qeth_queue_input_buffer(struct qeth_card *card, int index) in qeth_queue_input_buffer() argument
3163 struct qeth_qdio_q *queue = card->qdio.in_q; in qeth_queue_input_buffer()
3171 card->qdio.in_buf_pool.buf_count - in qeth_queue_input_buffer()
3173 card->qdio.in_buf_pool.buf_count - in qeth_queue_input_buffer()
3176 if (count >= QETH_IN_BUF_REQUEUE_THRESHOLD(card)) { in qeth_queue_input_buffer()
3179 if (qeth_init_input_buffer(card, in qeth_queue_input_buffer()
3190 atomic_set(&card->force_alloc_skb, 3); in qeth_queue_input_buffer()
3193 atomic_add_unless(&card->force_alloc_skb, -1, 0); in qeth_queue_input_buffer()
3198 list_for_each(lh, &card->qdio.in_buf_pool.entry_list) in qeth_queue_input_buffer()
3200 if (i == card->qdio.in_buf_pool.buf_count) { in qeth_queue_input_buffer()
3201 QETH_CARD_TEXT(card, 2, "qsarbw"); in qeth_queue_input_buffer()
3202 card->reclaim_index = index; in qeth_queue_input_buffer()
3204 &card->buffer_reclaim_work, in qeth_queue_input_buffer()
3217 if (card->options.performance_stats) { in qeth_queue_input_buffer()
3218 card->perf_stats.inbound_do_qdio_cnt++; in qeth_queue_input_buffer()
3219 card->perf_stats.inbound_do_qdio_start_time = in qeth_queue_input_buffer()
3222 rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, 0, in qeth_queue_input_buffer()
3224 if (card->options.performance_stats) in qeth_queue_input_buffer()
3225 card->perf_stats.inbound_do_qdio_time += in qeth_queue_input_buffer()
3227 card->perf_stats.inbound_do_qdio_start_time; in qeth_queue_input_buffer()
3229 QETH_CARD_TEXT(card, 2, "qinberr"); in qeth_queue_input_buffer()
3237 static int qeth_handle_send_error(struct qeth_card *card, in qeth_handle_send_error() argument
3242 QETH_CARD_TEXT(card, 6, "hdsnderr"); in qeth_handle_send_error()
3243 if (card->info.type == QETH_CARD_TYPE_IQD) { in qeth_handle_send_error()
3250 qeth_check_qdio_errors(card, buffer->buffer, qdio_err, "qouterr"); in qeth_handle_send_error()
3258 QETH_CARD_TEXT(card, 1, "lnkfail"); in qeth_handle_send_error()
3259 QETH_CARD_TEXT_(card, 1, "%04x %02x", in qeth_handle_send_error()
3274 QETH_CARD_TEXT(queue->card, 6, "np->pack"); in qeth_switch_to_packing_if_needed()
3275 if (queue->card->options.performance_stats) in qeth_switch_to_packing_if_needed()
3276 queue->card->perf_stats.sc_dp_p++; in qeth_switch_to_packing_if_needed()
3297 QETH_CARD_TEXT(queue->card, 6, "pack->np"); in qeth_switch_to_nonpacking_if_needed()
3298 if (queue->card->options.performance_stats) in qeth_switch_to_nonpacking_if_needed()
3299 queue->card->perf_stats.sc_p_dp++; in qeth_switch_to_nonpacking_if_needed()
3357 if (queue->card->info.type == QETH_CARD_TYPE_IQD) in qeth_flush_buffers()
3386 queue->card->dev->trans_start = jiffies; in qeth_flush_buffers()
3387 if (queue->card->options.performance_stats) { in qeth_flush_buffers()
3388 queue->card->perf_stats.outbound_do_qdio_cnt++; in qeth_flush_buffers()
3389 queue->card->perf_stats.outbound_do_qdio_start_time = in qeth_flush_buffers()
3395 rc = do_QDIO(CARD_DDEV(queue->card), qdio_flags, in qeth_flush_buffers()
3397 if (queue->card->options.performance_stats) in qeth_flush_buffers()
3398 queue->card->perf_stats.outbound_do_qdio_time += in qeth_flush_buffers()
3400 queue->card->perf_stats.outbound_do_qdio_start_time; in qeth_flush_buffers()
3403 queue->card->stats.tx_errors += count; in qeth_flush_buffers()
3407 QETH_CARD_TEXT(queue->card, 2, "flushbuf"); in qeth_flush_buffers()
3408 QETH_CARD_TEXT_(queue->card, 2, " q%d", queue->queue_no); in qeth_flush_buffers()
3409 QETH_CARD_TEXT_(queue->card, 2, " idx%d", index); in qeth_flush_buffers()
3410 QETH_CARD_TEXT_(queue->card, 2, " c%d", count); in qeth_flush_buffers()
3411 QETH_CARD_TEXT_(queue->card, 2, " err%d", rc); in qeth_flush_buffers()
3415 qeth_schedule_recovery(queue->card); in qeth_flush_buffers()
3418 if (queue->card->options.performance_stats) in qeth_flush_buffers()
3419 queue->card->perf_stats.bufs_sent += count; in qeth_flush_buffers()
3441 netif_stop_queue(queue->card->dev); in qeth_check_outbound_queue()
3451 if (queue->card->options.performance_stats && in qeth_check_outbound_queue()
3453 queue->card->perf_stats.bufs_sent_pack += in qeth_check_outbound_queue()
3465 struct qeth_card *card = (struct qeth_card *)card_ptr; in qeth_qdio_start_poll() local
3467 if (card->dev && (card->dev->flags & IFF_UP)) in qeth_qdio_start_poll()
3468 napi_schedule(&card->napi); in qeth_qdio_start_poll()
3472 int qeth_configure_cq(struct qeth_card *card, enum qeth_cq cq) in qeth_configure_cq() argument
3476 if (card->options.cq == QETH_CQ_NOTAVAILABLE) { in qeth_configure_cq()
3480 if (card->options.cq == cq) { in qeth_configure_cq()
3485 if (card->state != CARD_STATE_DOWN && in qeth_configure_cq()
3486 card->state != CARD_STATE_RECOVER) { in qeth_configure_cq()
3491 qeth_free_qdio_buffers(card); in qeth_configure_cq()
3492 card->options.cq = cq; in qeth_configure_cq()
3502 static void qeth_qdio_cq_handler(struct qeth_card *card, in qeth_qdio_cq_handler() argument
3505 struct qeth_qdio_q *cq = card->qdio.c_q; in qeth_qdio_cq_handler()
3509 if (!qeth_is_cq(card, queue)) in qeth_qdio_cq_handler()
3512 QETH_CARD_TEXT_(card, 5, "qcqhe%d", first_element); in qeth_qdio_cq_handler()
3513 QETH_CARD_TEXT_(card, 5, "qcqhc%d", count); in qeth_qdio_cq_handler()
3514 QETH_CARD_TEXT_(card, 5, "qcqherr%d", qdio_err); in qeth_qdio_cq_handler()
3517 netif_stop_queue(card->dev); in qeth_qdio_cq_handler()
3518 qeth_schedule_recovery(card); in qeth_qdio_cq_handler()
3522 if (card->options.performance_stats) { in qeth_qdio_cq_handler()
3523 card->perf_stats.cq_cnt++; in qeth_qdio_cq_handler()
3524 card->perf_stats.cq_start_time = qeth_get_micros(); in qeth_qdio_cq_handler()
3537 qeth_qdio_handle_aob(card, phys_aob_addr); in qeth_qdio_cq_handler()
3549 rc = do_QDIO(CARD_DDEV(card), QDIO_FLAG_SYNC_INPUT, queue, in qeth_qdio_cq_handler()
3550 card->qdio.c_q->next_buf_to_init, in qeth_qdio_cq_handler()
3553 dev_warn(&card->gdev->dev, in qeth_qdio_cq_handler()
3555 QETH_CARD_TEXT(card, 2, "qcqherr"); in qeth_qdio_cq_handler()
3557 card->qdio.c_q->next_buf_to_init = (card->qdio.c_q->next_buf_to_init in qeth_qdio_cq_handler()
3560 netif_wake_queue(card->dev); in qeth_qdio_cq_handler()
3562 if (card->options.performance_stats) { in qeth_qdio_cq_handler()
3564 delta_t -= card->perf_stats.cq_start_time; in qeth_qdio_cq_handler()
3565 card->perf_stats.cq_time += delta_t; in qeth_qdio_cq_handler()
3575 struct qeth_card *card = (struct qeth_card *)card_ptr; in qeth_qdio_input_handler() local
3577 QETH_CARD_TEXT_(card, 2, "qihq%d", queue); in qeth_qdio_input_handler()
3578 QETH_CARD_TEXT_(card, 2, "qiec%d", qdio_err); in qeth_qdio_input_handler()
3580 if (qeth_is_cq(card, queue)) in qeth_qdio_input_handler()
3581 qeth_qdio_cq_handler(card, qdio_err, queue, first_elem, count); in qeth_qdio_input_handler()
3583 qeth_schedule_recovery(card); in qeth_qdio_input_handler()
3593 struct qeth_card *card = (struct qeth_card *) card_ptr; in qeth_qdio_output_handler() local
3594 struct qeth_qdio_out_q *queue = card->qdio.out_qs[__queue]; in qeth_qdio_output_handler()
3598 QETH_CARD_TEXT(card, 6, "qdouhdl"); in qeth_qdio_output_handler()
3600 QETH_CARD_TEXT(card, 2, "achkcond"); in qeth_qdio_output_handler()
3601 netif_stop_queue(card->dev); in qeth_qdio_output_handler()
3602 qeth_schedule_recovery(card); in qeth_qdio_output_handler()
3605 if (card->options.performance_stats) { in qeth_qdio_output_handler()
3606 card->perf_stats.outbound_handler_cnt++; in qeth_qdio_output_handler()
3607 card->perf_stats.outbound_handler_start_time = in qeth_qdio_output_handler()
3613 qeth_handle_send_error(card, buffer, qdio_error); in qeth_qdio_output_handler()
3618 WARN_ON_ONCE(card->options.cq != QETH_CQ_ENABLED); in qeth_qdio_output_handler()
3628 QETH_CARD_TEXT_(queue->card, 5, "pel%d", bidx); in qeth_qdio_output_handler()
3629 QETH_CARD_TEXT(queue->card, 5, "aob"); in qeth_qdio_output_handler()
3630 QETH_CARD_TEXT_(queue->card, 5, "%lx", in qeth_qdio_output_handler()
3633 QETH_CARD_TEXT(card, 2, "outofbuf"); in qeth_qdio_output_handler()
3634 qeth_schedule_recovery(card); in qeth_qdio_output_handler()
3637 if (card->options.cq == QETH_CQ_ENABLED) { in qeth_qdio_output_handler()
3652 if (card->info.type != QETH_CARD_TYPE_IQD) in qeth_qdio_output_handler()
3655 netif_wake_queue(queue->card->dev); in qeth_qdio_output_handler()
3656 if (card->options.performance_stats) in qeth_qdio_output_handler()
3657 card->perf_stats.outbound_handler_time += qeth_get_micros() - in qeth_qdio_output_handler()
3658 card->perf_stats.outbound_handler_start_time; in qeth_qdio_output_handler()
3662 int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb, in qeth_get_priority_queue() argument
3665 if (!ipv && (card->info.type == QETH_CARD_TYPE_OSD || in qeth_get_priority_queue()
3666 card->info.type == QETH_CARD_TYPE_OSX)) in qeth_get_priority_queue()
3667 return card->qdio.default_out_queue; in qeth_get_priority_queue()
3668 switch (card->qdio.no_out_queues) { in qeth_get_priority_queue()
3670 if (cast_type && card->info.is_multicast_different) in qeth_get_priority_queue()
3671 return card->info.is_multicast_different & in qeth_get_priority_queue()
3672 (card->qdio.no_out_queues - 1); in qeth_get_priority_queue()
3673 if (card->qdio.do_prio_queueing && (ipv == 4)) { in qeth_get_priority_queue()
3676 if (card->qdio.do_prio_queueing == in qeth_get_priority_queue()
3687 if (card->qdio.do_prio_queueing == in qeth_get_priority_queue()
3690 } else if (card->qdio.do_prio_queueing && (ipv == 6)) { in qeth_get_priority_queue()
3693 return card->qdio.default_out_queue; in qeth_get_priority_queue()
3696 return card->qdio.default_out_queue; in qeth_get_priority_queue()
3720 int qeth_get_elements_no(struct qeth_card *card, in qeth_get_elements_no() argument
3729 if ((elements_needed + elems) > QETH_MAX_BUFFER_ELEMENTS(card)) { in qeth_get_elements_no()
3880 QETH_CARD_TEXT(queue->card, 6, "fillbfnp"); in qeth_fill_buffer()
3885 QETH_CARD_TEXT(queue->card, 6, "fillbfpa"); in qeth_fill_buffer()
3886 if (queue->card->options.performance_stats) in qeth_fill_buffer()
3887 queue->card->perf_stats.skbs_sent_pack++; in qeth_fill_buffer()
3889 QETH_MAX_BUFFER_ELEMENTS(queue->card)) { in qeth_fill_buffer()
3901 int qeth_do_send_packet_fast(struct qeth_card *card, in qeth_do_send_packet_fast() argument
3933 int qeth_do_send_packet(struct qeth_card *card, struct qeth_qdio_out_q *queue, in qeth_do_send_packet() argument
3962 if ((QETH_MAX_BUFFER_ELEMENTS(card) - in qeth_do_send_packet()
4012 if (queue->card->options.performance_stats && do_pack) in qeth_do_send_packet()
4013 queue->card->perf_stats.bufs_sent_pack += flush_count; in qeth_do_send_packet()
4019 static int qeth_setadp_promisc_mode_cb(struct qeth_card *card, in qeth_setadp_promisc_mode_cb() argument
4025 QETH_CARD_TEXT(card, 4, "prmadpcb"); in qeth_setadp_promisc_mode_cb()
4030 qeth_default_setadapterparms_cb(card, reply, (unsigned long)cmd); in qeth_setadp_promisc_mode_cb()
4032 QETH_CARD_TEXT_(card, 4, "prmrc%2.2x", cmd->hdr.return_code); in qeth_setadp_promisc_mode_cb()
4035 card->info.promisc_mode = setparms->data.mode; in qeth_setadp_promisc_mode_cb()
4039 void qeth_setadp_promisc_mode(struct qeth_card *card) in qeth_setadp_promisc_mode() argument
4042 struct net_device *dev = card->dev; in qeth_setadp_promisc_mode()
4046 QETH_CARD_TEXT(card, 4, "setprom"); in qeth_setadp_promisc_mode()
4049 (card->info.promisc_mode == SET_PROMISC_MODE_ON)) || in qeth_setadp_promisc_mode()
4051 (card->info.promisc_mode == SET_PROMISC_MODE_OFF))) in qeth_setadp_promisc_mode()
4056 QETH_CARD_TEXT_(card, 4, "mode:%x", mode); in qeth_setadp_promisc_mode()
4058 iob = qeth_get_adapter_cmd(card, IPA_SETADP_SET_PROMISC_MODE, in qeth_setadp_promisc_mode()
4062 qeth_send_ipa_cmd(card, iob, qeth_setadp_promisc_mode_cb, NULL); in qeth_setadp_promisc_mode()
4068 struct qeth_card *card; in qeth_change_mtu() local
4071 card = dev->ml_priv; in qeth_change_mtu()
4073 QETH_CARD_TEXT(card, 4, "chgmtu"); in qeth_change_mtu()
4075 QETH_CARD_TEXT(card, 4, dbf_text); in qeth_change_mtu()
4081 if ((!qeth_is_supported(card, IPA_IP_FRAGMENTATION)) && in qeth_change_mtu()
4082 (!qeth_mtu_is_valid(card, new_mtu))) in qeth_change_mtu()
4091 struct qeth_card *card; in qeth_get_stats() local
4093 card = dev->ml_priv; in qeth_get_stats()
4095 QETH_CARD_TEXT(card, 5, "getstat"); in qeth_get_stats()
4097 return &card->stats; in qeth_get_stats()
4101 static int qeth_setadpparms_change_macaddr_cb(struct qeth_card *card, in qeth_setadpparms_change_macaddr_cb() argument
4106 QETH_CARD_TEXT(card, 4, "chgmaccb"); in qeth_setadpparms_change_macaddr_cb()
4109 if (!card->options.layer2 || in qeth_setadpparms_change_macaddr_cb()
4110 !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) { in qeth_setadpparms_change_macaddr_cb()
4111 memcpy(card->dev->dev_addr, in qeth_setadpparms_change_macaddr_cb()
4114 card->info.mac_bits |= QETH_LAYER2_MAC_READ; in qeth_setadpparms_change_macaddr_cb()
4116 qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd); in qeth_setadpparms_change_macaddr_cb()
4120 int qeth_setadpparms_change_macaddr(struct qeth_card *card) in qeth_setadpparms_change_macaddr() argument
4126 QETH_CARD_TEXT(card, 4, "chgmac"); in qeth_setadpparms_change_macaddr()
4128 iob = qeth_get_adapter_cmd(card, IPA_SETADP_ALTER_MAC_ADDRESS, in qeth_setadpparms_change_macaddr()
4134 card->dev->dev_addr, OSA_ADDR_LEN); in qeth_setadpparms_change_macaddr()
4135 rc = qeth_send_ipa_cmd(card, iob, qeth_setadpparms_change_macaddr_cb, in qeth_setadpparms_change_macaddr()
4141 static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card, in qeth_setadpparms_set_access_ctrl_cb() argument
4148 QETH_CARD_TEXT(card, 4, "setaccb"); in qeth_setadpparms_set_access_ctrl_cb()
4153 QETH_DBF_TEXT_(SETUP, 2, "%s", card->gdev->dev.kobj.name); in qeth_setadpparms_set_access_ctrl_cb()
4159 card->gdev->dev.kobj.name, in qeth_setadpparms_set_access_ctrl_cb()
4164 if (card->options.isolation == ISOLATION_MODE_NONE) { in qeth_setadpparms_set_access_ctrl_cb()
4165 dev_info(&card->gdev->dev, in qeth_setadpparms_set_access_ctrl_cb()
4168 dev_info(&card->gdev->dev, in qeth_setadpparms_set_access_ctrl_cb()
4174 "deactivated\n", dev_name(&card->gdev->dev)); in qeth_setadpparms_set_access_ctrl_cb()
4176 card->options.isolation = card->options.prev_isolation; in qeth_setadpparms_set_access_ctrl_cb()
4180 " activated\n", dev_name(&card->gdev->dev)); in qeth_setadpparms_set_access_ctrl_cb()
4182 card->options.isolation = card->options.prev_isolation; in qeth_setadpparms_set_access_ctrl_cb()
4185 dev_err(&card->gdev->dev, "Adapter does not " in qeth_setadpparms_set_access_ctrl_cb()
4189 dev_err(&card->gdev->dev, in qeth_setadpparms_set_access_ctrl_cb()
4193 card->options.isolation = card->options.prev_isolation; in qeth_setadpparms_set_access_ctrl_cb()
4196 dev_err(&card->gdev->dev, in qeth_setadpparms_set_access_ctrl_cb()
4199 card->options.isolation = card->options.prev_isolation; in qeth_setadpparms_set_access_ctrl_cb()
4202 dev_err(&card->gdev->dev, "The adjacent switch port does not " in qeth_setadpparms_set_access_ctrl_cb()
4205 card->options.isolation = card->options.prev_isolation; in qeth_setadpparms_set_access_ctrl_cb()
4208 dev_err(&card->gdev->dev, "The reflective relay mode cannot be " in qeth_setadpparms_set_access_ctrl_cb()
4211 card->options.isolation = card->options.prev_isolation; in qeth_setadpparms_set_access_ctrl_cb()
4214 dev_warn(&card->gdev->dev, "Turning off reflective relay mode " in qeth_setadpparms_set_access_ctrl_cb()
4220 card->options.isolation = card->options.prev_isolation; in qeth_setadpparms_set_access_ctrl_cb()
4223 qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd); in qeth_setadpparms_set_access_ctrl_cb()
4227 static int qeth_setadpparms_set_access_ctrl(struct qeth_card *card, in qeth_setadpparms_set_access_ctrl() argument
4235 QETH_CARD_TEXT(card, 4, "setacctl"); in qeth_setadpparms_set_access_ctrl()
4238 QETH_DBF_TEXT_(SETUP, 2, "%s", card->gdev->dev.kobj.name); in qeth_setadpparms_set_access_ctrl()
4240 iob = qeth_get_adapter_cmd(card, IPA_SETADP_SET_ACCESS_CONTROL, in qeth_setadpparms_set_access_ctrl()
4247 rc = qeth_send_ipa_cmd(card, iob, qeth_setadpparms_set_access_ctrl_cb, in qeth_setadpparms_set_access_ctrl()
4253 int qeth_set_access_ctrl_online(struct qeth_card *card, int fallback) in qeth_set_access_ctrl_online() argument
4257 QETH_CARD_TEXT(card, 4, "setactlo"); in qeth_set_access_ctrl_online()
4259 if ((card->info.type == QETH_CARD_TYPE_OSD || in qeth_set_access_ctrl_online()
4260 card->info.type == QETH_CARD_TYPE_OSX) && in qeth_set_access_ctrl_online()
4261 qeth_adp_supported(card, IPA_SETADP_SET_ACCESS_CONTROL)) { in qeth_set_access_ctrl_online()
4262 rc = qeth_setadpparms_set_access_ctrl(card, in qeth_set_access_ctrl_online()
4263 card->options.isolation, fallback); in qeth_set_access_ctrl_online()
4267 card->gdev->dev.kobj.name, in qeth_set_access_ctrl_online()
4271 } else if (card->options.isolation != ISOLATION_MODE_NONE) { in qeth_set_access_ctrl_online()
4272 card->options.isolation = ISOLATION_MODE_NONE; in qeth_set_access_ctrl_online()
4274 dev_err(&card->gdev->dev, "Adapter does not " in qeth_set_access_ctrl_online()
4284 struct qeth_card *card; in qeth_tx_timeout() local
4286 card = dev->ml_priv; in qeth_tx_timeout()
4287 QETH_CARD_TEXT(card, 4, "txtimeo"); in qeth_tx_timeout()
4288 card->stats.tx_errors++; in qeth_tx_timeout()
4289 qeth_schedule_recovery(card); in qeth_tx_timeout()
4295 struct qeth_card *card = dev->ml_priv; in qeth_mdio_read() local
4301 if ((card->info.link_type != QETH_LINK_TYPE_GBIT_ETH) && in qeth_mdio_read()
4302 (card->info.link_type != QETH_LINK_TYPE_OSN) && in qeth_mdio_read()
4303 (card->info.link_type != QETH_LINK_TYPE_10GBIT_ETH)) in qeth_mdio_read()
4335 rc = card->stats.rx_errors; in qeth_mdio_read()
4358 static int qeth_send_ipa_snmp_cmd(struct qeth_card *card, in qeth_send_ipa_snmp_cmd() argument
4366 QETH_CARD_TEXT(card, 4, "sendsnmp"); in qeth_send_ipa_snmp_cmd()
4370 &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH); in qeth_send_ipa_snmp_cmd()
4378 return qeth_send_control_data(card, IPA_PDU_HEADER_SIZE + len, iob, in qeth_send_ipa_snmp_cmd()
4382 static int qeth_snmp_command_cb(struct qeth_card *card, in qeth_snmp_command_cb() argument
4391 QETH_CARD_TEXT(card, 3, "snpcmdcb"); in qeth_snmp_command_cb()
4399 QETH_CARD_TEXT_(card, 4, "scer1%i", cmd->hdr.return_code); in qeth_snmp_command_cb()
4405 QETH_CARD_TEXT_(card, 4, "scer2%i", cmd->hdr.return_code); in qeth_snmp_command_cb()
4416 QETH_CARD_TEXT_(card, 4, "scer3%i", -ENOMEM); in qeth_snmp_command_cb()
4420 QETH_CARD_TEXT_(card, 4, "snore%i", in qeth_snmp_command_cb()
4422 QETH_CARD_TEXT_(card, 4, "sseqn%i", in qeth_snmp_command_cb()
4436 QETH_CARD_TEXT_(card, 4, "srtot%i", in qeth_snmp_command_cb()
4438 QETH_CARD_TEXT_(card, 4, "srseq%i", in qeth_snmp_command_cb()
4446 int qeth_snmp_command(struct qeth_card *card, char __user *udata) in qeth_snmp_command() argument
4455 QETH_CARD_TEXT(card, 3, "snmpcmd"); in qeth_snmp_command()
4457 if (card->info.guestlan) in qeth_snmp_command()
4460 if ((!qeth_adp_supported(card, IPA_SETADP_SET_SNMP_CONTROL)) && in qeth_snmp_command()
4461 (!card->options.layer2)) { in qeth_snmp_command()
4469 QETH_CARD_TEXT(card, 2, "snmpnome"); in qeth_snmp_command()
4480 iob = qeth_get_adapter_cmd(card, IPA_SETADP_SET_SNMP_CONTROL, in qeth_snmp_command()
4484 rc = qeth_send_ipa_snmp_cmd(card, iob, QETH_SETADP_BASE_LEN + req_len, in qeth_snmp_command()
4488 QETH_CARD_IFNAME(card), rc); in qeth_snmp_command()
4500 static int qeth_setadpparms_query_oat_cb(struct qeth_card *card, in qeth_setadpparms_query_oat_cb() argument
4508 QETH_CARD_TEXT(card, 3, "qoatcb"); in qeth_setadpparms_query_oat_cb()
4530 int qeth_query_oat_command(struct qeth_card *card, char __user *udata) in qeth_query_oat_command() argument
4540 QETH_CARD_TEXT(card, 3, "qoatcmd"); in qeth_query_oat_command()
4542 if (!qeth_adp_supported(card, IPA_SETADP_QUERY_OAT)) { in qeth_query_oat_command()
4561 iob = qeth_get_adapter_cmd(card, IPA_SETADP_QUERY_OAT, in qeth_query_oat_command()
4568 rc = qeth_send_ipa_cmd(card, iob, qeth_setadpparms_query_oat_cb, in qeth_query_oat_command()
4598 static inline int qeth_get_qdio_q_format(struct qeth_card *card) in qeth_get_qdio_q_format() argument
4600 switch (card->info.type) { in qeth_get_qdio_q_format()
4608 static void qeth_determine_capabilities(struct qeth_card *card) in qeth_determine_capabilities() argument
4617 ddev = CARD_DDEV(card); in qeth_determine_capabilities()
4627 rc = qeth_read_conf_data(card, (void **) &prcd, &length); in qeth_determine_capabilities()
4630 dev_name(&card->gdev->dev), rc); in qeth_determine_capabilities()
4634 qeth_configure_unitaddr(card, prcd); in qeth_determine_capabilities()
4636 qeth_configure_blkt_default(card, prcd); in qeth_determine_capabilities()
4639 rc = qdio_get_ssqd_desc(ddev, &card->ssqd); in qeth_determine_capabilities()
4643 QETH_DBF_TEXT_(SETUP, 2, "qfmt%d", card->ssqd.qfmt); in qeth_determine_capabilities()
4644 QETH_DBF_TEXT_(SETUP, 2, "%d", card->ssqd.qdioac1); in qeth_determine_capabilities()
4645 QETH_DBF_TEXT_(SETUP, 2, "%d", card->ssqd.qdioac3); in qeth_determine_capabilities()
4646 QETH_DBF_TEXT_(SETUP, 2, "icnt%d", card->ssqd.icnt); in qeth_determine_capabilities()
4647 if (!((card->ssqd.qfmt != QDIO_IQDIO_QFMT) || in qeth_determine_capabilities()
4648 ((card->ssqd.qdioac1 & CHSC_AC1_INITIATE_INPUTQ) == 0) || in qeth_determine_capabilities()
4649 ((card->ssqd.qdioac3 & CHSC_AC3_FORMAT2_CQ_AVAILABLE) == 0))) { in qeth_determine_capabilities()
4650 dev_info(&card->gdev->dev, in qeth_determine_capabilities()
4653 card->options.cq = QETH_CQ_NOTAVAILABLE; in qeth_determine_capabilities()
4664 static inline void qeth_qdio_establish_cq(struct qeth_card *card, in qeth_qdio_establish_cq() argument
4669 if (card->options.cq == QETH_CQ_ENABLED) { in qeth_qdio_establish_cq()
4671 (card->qdio.no_in_queues - 1); in qeth_qdio_establish_cq()
4672 i = QDIO_MAX_BUFFERS_PER_Q * (card->qdio.no_in_queues - 1); in qeth_qdio_establish_cq()
4675 virt_to_phys(card->qdio.c_q->bufs[i].buffer); in qeth_qdio_establish_cq()
4678 queue_start_poll[card->qdio.no_in_queues - 1] = NULL; in qeth_qdio_establish_cq()
4682 static int qeth_qdio_establish(struct qeth_card *card) in qeth_qdio_establish() argument
4701 qeth_create_qib_param_field(card, qib_param_field); in qeth_qdio_establish()
4702 qeth_create_qib_param_field_blkt(card, qib_param_field); in qeth_qdio_establish()
4704 in_sbal_ptrs = kzalloc(card->qdio.no_in_queues * in qeth_qdio_establish()
4713 virt_to_phys(card->qdio.in_q->bufs[i].buffer); in qeth_qdio_establish()
4716 queue_start_poll = kzalloc(sizeof(void *) * card->qdio.no_in_queues, in qeth_qdio_establish()
4722 for (i = 0; i < card->qdio.no_in_queues; ++i) in qeth_qdio_establish()
4723 queue_start_poll[i] = card->discipline->start_poll; in qeth_qdio_establish()
4725 qeth_qdio_establish_cq(card, in_sbal_ptrs, queue_start_poll); in qeth_qdio_establish()
4728 kzalloc(card->qdio.no_out_queues * QDIO_MAX_BUFFERS_PER_Q * in qeth_qdio_establish()
4734 for (i = 0, k = 0; i < card->qdio.no_out_queues; ++i) in qeth_qdio_establish()
4737 card->qdio.out_qs[i]->bufs[j]->buffer); in qeth_qdio_establish()
4741 init_data.cdev = CARD_DDEV(card); in qeth_qdio_establish()
4742 init_data.q_format = qeth_get_qdio_q_format(card); in qeth_qdio_establish()
4745 init_data.no_input_qs = card->qdio.no_in_queues; in qeth_qdio_establish()
4746 init_data.no_output_qs = card->qdio.no_out_queues; in qeth_qdio_establish()
4747 init_data.input_handler = card->discipline->input_handler; in qeth_qdio_establish()
4748 init_data.output_handler = card->discipline->output_handler; in qeth_qdio_establish()
4750 init_data.int_parm = (unsigned long) card; in qeth_qdio_establish()
4753 init_data.output_sbal_state_array = card->qdio.out_bufstates; in qeth_qdio_establish()
4755 (card->info.type == QETH_CARD_TYPE_IQD) ? 1 : 32; in qeth_qdio_establish()
4757 if (atomic_cmpxchg(&card->qdio.state, QETH_QDIO_ALLOCATED, in qeth_qdio_establish()
4761 atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED); in qeth_qdio_establish()
4766 atomic_set(&card->qdio.state, QETH_QDIO_ALLOCATED); in qeth_qdio_establish()
4767 qdio_free(CARD_DDEV(card)); in qeth_qdio_establish()
4771 switch (card->options.cq) { in qeth_qdio_establish()
4773 dev_info(&card->gdev->dev, "Completion Queue support enabled"); in qeth_qdio_establish()
4776 dev_info(&card->gdev->dev, "Completion Queue support disabled"); in qeth_qdio_establish()
4793 static void qeth_core_free_card(struct qeth_card *card) in qeth_core_free_card() argument
4797 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *)); in qeth_core_free_card()
4798 qeth_clean_channel(&card->read); in qeth_core_free_card()
4799 qeth_clean_channel(&card->write); in qeth_core_free_card()
4800 if (card->dev) in qeth_core_free_card()
4801 free_netdev(card->dev); in qeth_core_free_card()
4802 kfree(card->ip_tbd_list); in qeth_core_free_card()
4803 qeth_free_qdio_buffers(card); in qeth_core_free_card()
4804 unregister_service_level(&card->qeth_service_level); in qeth_core_free_card()
4805 kfree(card); in qeth_core_free_card()
4808 void qeth_trace_features(struct qeth_card *card) in qeth_trace_features() argument
4810 QETH_CARD_TEXT(card, 2, "features"); in qeth_trace_features()
4811 QETH_CARD_TEXT_(card, 2, "%x", card->options.ipa4.supported_funcs); in qeth_trace_features()
4812 QETH_CARD_TEXT_(card, 2, "%x", card->options.ipa4.enabled_funcs); in qeth_trace_features()
4813 QETH_CARD_TEXT_(card, 2, "%x", card->options.ipa6.supported_funcs); in qeth_trace_features()
4814 QETH_CARD_TEXT_(card, 2, "%x", card->options.ipa6.enabled_funcs); in qeth_trace_features()
4815 QETH_CARD_TEXT_(card, 2, "%x", card->options.adp.supported_funcs); in qeth_trace_features()
4816 QETH_CARD_TEXT_(card, 2, "%x", card->options.adp.enabled_funcs); in qeth_trace_features()
4817 QETH_CARD_TEXT_(card, 2, "%x", card->info.diagass_support); in qeth_trace_features()
4846 int qeth_core_hardsetup_card(struct qeth_card *card) in qeth_core_hardsetup_card() argument
4852 atomic_set(&card->force_alloc_skb, 0); in qeth_core_hardsetup_card()
4853 qeth_update_from_chp_desc(card); in qeth_core_hardsetup_card()
4857 dev_name(&card->gdev->dev)); in qeth_core_hardsetup_card()
4858 ccw_device_set_offline(CARD_DDEV(card)); in qeth_core_hardsetup_card()
4859 ccw_device_set_offline(CARD_WDEV(card)); in qeth_core_hardsetup_card()
4860 ccw_device_set_offline(CARD_RDEV(card)); in qeth_core_hardsetup_card()
4861 rc = ccw_device_set_online(CARD_RDEV(card)); in qeth_core_hardsetup_card()
4864 rc = ccw_device_set_online(CARD_WDEV(card)); in qeth_core_hardsetup_card()
4867 rc = ccw_device_set_online(CARD_DDEV(card)); in qeth_core_hardsetup_card()
4870 rc = qeth_qdio_clear_card(card, card->info.type != QETH_CARD_TYPE_IQD); in qeth_core_hardsetup_card()
4882 qeth_determine_capabilities(card); in qeth_core_hardsetup_card()
4883 qeth_init_tokens(card); in qeth_core_hardsetup_card()
4884 qeth_init_func_level(card); in qeth_core_hardsetup_card()
4885 rc = qeth_idx_activate_channel(&card->read, qeth_idx_read_cb); in qeth_core_hardsetup_card()
4896 rc = qeth_idx_activate_channel(&card->write, qeth_idx_write_cb); in qeth_core_hardsetup_card()
4907 card->read_or_write_problem = 0; in qeth_core_hardsetup_card()
4908 rc = qeth_mpc_initialize(card); in qeth_core_hardsetup_card()
4914 card->options.ipa4.supported_funcs = 0; in qeth_core_hardsetup_card()
4915 card->options.adp.supported_funcs = 0; in qeth_core_hardsetup_card()
4916 card->info.diagass_support = 0; in qeth_core_hardsetup_card()
4917 qeth_query_ipassists(card, QETH_PROT_IPV4); in qeth_core_hardsetup_card()
4918 if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) in qeth_core_hardsetup_card()
4919 qeth_query_setadapterparms(card); in qeth_core_hardsetup_card()
4920 if (qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) in qeth_core_hardsetup_card()
4921 qeth_query_setdiagass(card); in qeth_core_hardsetup_card()
4924 dev_warn(&card->gdev->dev, "The qeth device driver failed to recover " in qeth_core_hardsetup_card()
4927 dev_name(&card->gdev->dev), rc); in qeth_core_hardsetup_card()
4977 struct sk_buff *qeth_core_get_next_skb(struct qeth_card *card, in qeth_core_get_next_skb() argument
5024 if (((skb_len >= card->options.rx_sg_cb) && in qeth_core_get_next_skb()
5025 (!(card->info.type == QETH_CARD_TYPE_OSN)) && in qeth_core_get_next_skb()
5026 (!atomic_read(&card->force_alloc_skb))) || in qeth_core_get_next_skb()
5027 (card->options.cq == QETH_CQ_ENABLED)) { in qeth_core_get_next_skb()
5053 QETH_CARD_TEXT(card, 4, "unexeob"); in qeth_core_get_next_skb()
5054 QETH_CARD_HEX(card, 2, buffer, sizeof(void *)); in qeth_core_get_next_skb()
5056 card->stats.rx_errors++; in qeth_core_get_next_skb()
5068 if (use_rx_sg && card->options.performance_stats) { in qeth_core_get_next_skb()
5069 card->perf_stats.sg_skbs_rx++; in qeth_core_get_next_skb()
5070 card->perf_stats.sg_frags_rx += skb_shinfo(skb)->nr_frags; in qeth_core_get_next_skb()
5075 QETH_CARD_TEXT(card, 2, "noskbmem"); in qeth_core_get_next_skb()
5077 card->stats.rx_dropped++; in qeth_core_get_next_skb()
5135 int qeth_core_load_discipline(struct qeth_card *card, in qeth_core_load_discipline() argument
5142 card->discipline = try_then_request_module( in qeth_core_load_discipline()
5146 card->discipline = try_then_request_module( in qeth_core_load_discipline()
5150 if (!card->discipline) { in qeth_core_load_discipline()
5151 dev_err(&card->gdev->dev, "There is no kernel module to " in qeth_core_load_discipline()
5159 void qeth_core_free_discipline(struct qeth_card *card) in qeth_core_free_discipline() argument
5161 if (card->options.layer2) in qeth_core_free_discipline()
5165 card->discipline = NULL; in qeth_core_free_discipline()
5204 static int qeth_add_dbf_entry(struct qeth_card *card, char *name) in qeth_add_dbf_entry() argument
5208 card->debug = debug_register(name, 2, 1, 8); in qeth_add_dbf_entry()
5209 if (!card->debug) { in qeth_add_dbf_entry()
5213 if (debug_register_view(card->debug, &debug_hex_ascii_view)) in qeth_add_dbf_entry()
5219 new_entry->dbf_info = card->debug; in qeth_add_dbf_entry()
5227 debug_unregister(card->debug); in qeth_add_dbf_entry()
5247 struct qeth_card *card; in qeth_core_probe_device() local
5261 card = qeth_alloc_card(); in qeth_core_probe_device()
5262 if (!card) { in qeth_core_probe_device()
5270 card->debug = qeth_get_dbf_entry(dbf_name); in qeth_core_probe_device()
5271 if (!card->debug) { in qeth_core_probe_device()
5272 rc = qeth_add_dbf_entry(card, dbf_name); in qeth_core_probe_device()
5277 card->read.ccwdev = gdev->cdev[0]; in qeth_core_probe_device()
5278 card->write.ccwdev = gdev->cdev[1]; in qeth_core_probe_device()
5279 card->data.ccwdev = gdev->cdev[2]; in qeth_core_probe_device()
5280 dev_set_drvdata(&gdev->dev, card); in qeth_core_probe_device()
5281 card->gdev = gdev; in qeth_core_probe_device()
5286 rc = qeth_determine_card_type(card); in qeth_core_probe_device()
5291 rc = qeth_setup_card(card); in qeth_core_probe_device()
5297 if (card->info.type == QETH_CARD_TYPE_OSN) in qeth_core_probe_device()
5302 switch (card->info.type) { in qeth_core_probe_device()
5305 rc = qeth_core_load_discipline(card, QETH_DISCIPLINE_LAYER2); in qeth_core_probe_device()
5308 rc = card->discipline->setup(card->gdev); in qeth_core_probe_device()
5318 list_add_tail(&card->list, &qeth_core_card_list.list); in qeth_core_probe_device()
5321 qeth_determine_capabilities(card); in qeth_core_probe_device()
5325 qeth_core_free_discipline(card); in qeth_core_probe_device()
5327 qeth_core_free_card(card); in qeth_core_probe_device()
5336 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_remove_device() local
5340 if (card->discipline) { in qeth_core_remove_device()
5341 card->discipline->remove(gdev); in qeth_core_remove_device()
5342 qeth_core_free_discipline(card); in qeth_core_remove_device()
5346 list_del(&card->list); in qeth_core_remove_device()
5348 qeth_core_free_card(card); in qeth_core_remove_device()
5356 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_set_online() local
5360 if (!card->discipline) { in qeth_core_set_online()
5361 if (card->info.type == QETH_CARD_TYPE_IQD) in qeth_core_set_online()
5365 rc = qeth_core_load_discipline(card, def_discipline); in qeth_core_set_online()
5368 rc = card->discipline->setup(card->gdev); in qeth_core_set_online()
5372 rc = card->discipline->set_online(gdev); in qeth_core_set_online()
5379 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_set_offline() local
5380 return card->discipline->set_offline(gdev); in qeth_core_set_offline()
5385 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_shutdown() local
5386 if (card->discipline && card->discipline->shutdown) in qeth_core_shutdown()
5387 card->discipline->shutdown(gdev); in qeth_core_shutdown()
5392 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_prepare() local
5393 if (card->discipline && card->discipline->prepare) in qeth_core_prepare()
5394 return card->discipline->prepare(gdev); in qeth_core_prepare()
5400 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_complete() local
5401 if (card->discipline && card->discipline->complete) in qeth_core_complete()
5402 card->discipline->complete(gdev); in qeth_core_complete()
5407 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_freeze() local
5408 if (card->discipline && card->discipline->freeze) in qeth_core_freeze()
5409 return card->discipline->freeze(gdev); in qeth_core_freeze()
5415 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_thaw() local
5416 if (card->discipline && card->discipline->thaw) in qeth_core_thaw()
5417 return card->discipline->thaw(gdev); in qeth_core_thaw()
5423 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_core_restore() local
5424 if (card->discipline && card->discipline->restore) in qeth_core_restore()
5425 return card->discipline->restore(gdev); in qeth_core_restore()
5526 struct qeth_card *card = dev->ml_priv; in qeth_core_get_ethtool_stats() local
5527 data[0] = card->stats.rx_packets - in qeth_core_get_ethtool_stats()
5528 card->perf_stats.initial_rx_packets; in qeth_core_get_ethtool_stats()
5529 data[1] = card->perf_stats.bufs_rec; in qeth_core_get_ethtool_stats()
5530 data[2] = card->stats.tx_packets - in qeth_core_get_ethtool_stats()
5531 card->perf_stats.initial_tx_packets; in qeth_core_get_ethtool_stats()
5532 data[3] = card->perf_stats.bufs_sent; in qeth_core_get_ethtool_stats()
5533 data[4] = card->stats.tx_packets - card->perf_stats.initial_tx_packets in qeth_core_get_ethtool_stats()
5534 - card->perf_stats.skbs_sent_pack; in qeth_core_get_ethtool_stats()
5535 data[5] = card->perf_stats.bufs_sent - card->perf_stats.bufs_sent_pack; in qeth_core_get_ethtool_stats()
5536 data[6] = card->perf_stats.skbs_sent_pack; in qeth_core_get_ethtool_stats()
5537 data[7] = card->perf_stats.bufs_sent_pack; in qeth_core_get_ethtool_stats()
5538 data[8] = card->perf_stats.sg_skbs_sent; in qeth_core_get_ethtool_stats()
5539 data[9] = card->perf_stats.sg_frags_sent; in qeth_core_get_ethtool_stats()
5540 data[10] = card->perf_stats.sg_skbs_rx; in qeth_core_get_ethtool_stats()
5541 data[11] = card->perf_stats.sg_frags_rx; in qeth_core_get_ethtool_stats()
5542 data[12] = card->perf_stats.sg_alloc_page_rx; in qeth_core_get_ethtool_stats()
5543 data[13] = (card->perf_stats.large_send_bytes >> 10); in qeth_core_get_ethtool_stats()
5544 data[14] = card->perf_stats.large_send_cnt; in qeth_core_get_ethtool_stats()
5545 data[15] = card->perf_stats.sc_dp_p; in qeth_core_get_ethtool_stats()
5546 data[16] = card->perf_stats.sc_p_dp; in qeth_core_get_ethtool_stats()
5549 data[19] = atomic_read(&card->qdio.out_qs[0]->used_buffers); in qeth_core_get_ethtool_stats()
5550 data[20] = (card->qdio.no_out_queues > 1) ? in qeth_core_get_ethtool_stats()
5551 atomic_read(&card->qdio.out_qs[1]->used_buffers) : 0; in qeth_core_get_ethtool_stats()
5552 data[21] = (card->qdio.no_out_queues > 2) ? in qeth_core_get_ethtool_stats()
5553 atomic_read(&card->qdio.out_qs[2]->used_buffers) : 0; in qeth_core_get_ethtool_stats()
5554 data[22] = (card->qdio.no_out_queues > 3) ? in qeth_core_get_ethtool_stats()
5555 atomic_read(&card->qdio.out_qs[3]->used_buffers) : 0; in qeth_core_get_ethtool_stats()
5556 data[23] = card->perf_stats.inbound_time; in qeth_core_get_ethtool_stats()
5557 data[24] = card->perf_stats.inbound_cnt; in qeth_core_get_ethtool_stats()
5558 data[25] = card->perf_stats.inbound_do_qdio_time; in qeth_core_get_ethtool_stats()
5559 data[26] = card->perf_stats.inbound_do_qdio_cnt; in qeth_core_get_ethtool_stats()
5560 data[27] = card->perf_stats.outbound_handler_time; in qeth_core_get_ethtool_stats()
5561 data[28] = card->perf_stats.outbound_handler_cnt; in qeth_core_get_ethtool_stats()
5562 data[29] = card->perf_stats.outbound_time; in qeth_core_get_ethtool_stats()
5563 data[30] = card->perf_stats.outbound_cnt; in qeth_core_get_ethtool_stats()
5564 data[31] = card->perf_stats.outbound_do_qdio_time; in qeth_core_get_ethtool_stats()
5565 data[32] = card->perf_stats.outbound_do_qdio_cnt; in qeth_core_get_ethtool_stats()
5566 data[33] = card->perf_stats.tx_csum; in qeth_core_get_ethtool_stats()
5567 data[34] = card->perf_stats.tx_lin; in qeth_core_get_ethtool_stats()
5568 data[35] = card->perf_stats.cq_cnt; in qeth_core_get_ethtool_stats()
5569 data[36] = card->perf_stats.cq_time; in qeth_core_get_ethtool_stats()
5590 struct qeth_card *card = dev->ml_priv; in qeth_core_get_drvinfo() local
5592 strlcpy(info->driver, card->options.layer2 ? "qeth_l2" : "qeth_l3", in qeth_core_get_drvinfo()
5595 strlcpy(info->fw_version, card->info.mcl_level, in qeth_core_get_drvinfo()
5598 CARD_RDEV_ID(card), CARD_WDEV_ID(card), CARD_DDEV_ID(card)); in qeth_core_get_drvinfo()
5605 struct qeth_card *card = netdev->ml_priv; in qeth_core_ethtool_get_settings() local
5608 if ((card->info.type == QETH_CARD_TYPE_IQD) || (card->info.guestlan)) in qeth_core_ethtool_get_settings()
5611 link_type = card->info.link_type; in qeth_core_ethtool_get_settings()