Lines Matching refs:card
35 static void qeth_bridgeport_query_support(struct qeth_card *card);
36 static void qeth_bridge_state_change(struct qeth_card *card,
38 static void qeth_bridge_host_event(struct qeth_card *card,
43 struct qeth_card *card = dev->ml_priv; in qeth_l2_do_ioctl() local
47 if (!card) in qeth_l2_do_ioctl()
50 if (!qeth_card_hw_is_reachable(card)) in qeth_l2_do_ioctl()
53 if (card->info.type == QETH_CARD_TYPE_OSN) in qeth_l2_do_ioctl()
58 rc = qeth_snmp_command(card, rq->ifr_ifru.ifru_data); in qeth_l2_do_ioctl()
61 if ((card->info.type == QETH_CARD_TYPE_OSD || in qeth_l2_do_ioctl()
62 card->info.type == QETH_CARD_TYPE_OSM || in qeth_l2_do_ioctl()
63 card->info.type == QETH_CARD_TYPE_OSX) && in qeth_l2_do_ioctl()
64 !card->info.guestlan) in qeth_l2_do_ioctl()
81 rc = qeth_query_oat_command(card, rq->ifr_ifru.ifru_data); in qeth_l2_do_ioctl()
87 QETH_CARD_TEXT_(card, 2, "ioce%d", rc); in qeth_l2_do_ioctl()
93 struct qeth_card *card; in qeth_l2_verify_dev() local
98 list_for_each_entry(card, &qeth_core_card_list.list, list) { in qeth_l2_verify_dev()
99 if (card->dev == dev) { in qeth_l2_verify_dev()
111 struct qeth_card *card; in qeth_l2_netdev_by_devno() local
120 list_for_each_entry(card, &qeth_core_card_list.list, list) { in qeth_l2_netdev_by_devno()
121 ccw_device_get_id(CARD_RDEV(card), &read_devid); in qeth_l2_netdev_by_devno()
123 ndev = card->dev; in qeth_l2_netdev_by_devno()
131 static int qeth_setdel_makerc(struct qeth_card *card, int retcode) in qeth_setdel_makerc() argument
136 QETH_CARD_TEXT_(card, 2, "err%04x", retcode); in qeth_setdel_makerc()
168 static int qeth_l2_send_setgroupmac(struct qeth_card *card, __u8 *mac) in qeth_l2_send_setgroupmac() argument
172 QETH_CARD_TEXT(card, 2, "L2Sgmac"); in qeth_l2_send_setgroupmac()
173 rc = qeth_setdel_makerc(card, qeth_l2_send_setdelmac(card, mac, in qeth_l2_send_setgroupmac()
177 mac, QETH_CARD_IFNAME(card)); in qeth_l2_send_setgroupmac()
180 mac, QETH_CARD_IFNAME(card), rc); in qeth_l2_send_setgroupmac()
184 static int qeth_l2_send_delgroupmac(struct qeth_card *card, __u8 *mac) in qeth_l2_send_delgroupmac() argument
188 QETH_CARD_TEXT(card, 2, "L2Dgmac"); in qeth_l2_send_delgroupmac()
189 rc = qeth_setdel_makerc(card, qeth_l2_send_setdelmac(card, mac, in qeth_l2_send_delgroupmac()
194 mac, QETH_CARD_IFNAME(card), rc); in qeth_l2_send_delgroupmac()
203 static int qeth_l2_write_mac(struct qeth_card *card, struct qeth_mac *mac) in qeth_l2_write_mac() argument
209 rc = qeth_setdel_makerc(card, in qeth_l2_write_mac()
210 qeth_l2_send_setdelmac(card, mac->mac_addr, in qeth_l2_write_mac()
213 rc = qeth_setdel_makerc(card, in qeth_l2_write_mac()
214 qeth_l2_send_setgroupmac(card, mac->mac_addr)); in qeth_l2_write_mac()
219 static void qeth_l2_del_all_macs(struct qeth_card *card, int del) in qeth_l2_del_all_macs() argument
225 spin_lock_bh(&card->mclock); in qeth_l2_del_all_macs()
226 hash_for_each_safe(card->mac_htable, i, tmp, mac, hnode) { in qeth_l2_del_all_macs()
229 qeth_l2_send_setdelmac(card, mac->mac_addr, in qeth_l2_del_all_macs()
232 qeth_l2_send_delgroupmac(card, mac->mac_addr); in qeth_l2_del_all_macs()
237 spin_unlock_bh(&card->mclock); in qeth_l2_del_all_macs()
240 static inline int qeth_l2_get_cast_type(struct qeth_card *card, in qeth_l2_get_cast_type() argument
243 if (card->info.type == QETH_CARD_TYPE_OSN) in qeth_l2_get_cast_type()
252 static inline void qeth_l2_hdr_csum(struct qeth_card *card, in qeth_l2_hdr_csum() argument
265 if (card->options.performance_stats) in qeth_l2_hdr_csum()
266 card->perf_stats.tx_csum++; in qeth_l2_hdr_csum()
269 static void qeth_l2_fill_header(struct qeth_card *card, struct qeth_hdr *hdr, in qeth_l2_fill_header() argument
295 static int qeth_l2_send_setdelvlan_cb(struct qeth_card *card, in qeth_l2_send_setdelvlan_cb() argument
300 QETH_CARD_TEXT(card, 2, "L2sdvcb"); in qeth_l2_send_setdelvlan_cb()
305 QETH_CARD_IFNAME(card), cmd->hdr.return_code); in qeth_l2_send_setdelvlan_cb()
306 QETH_CARD_TEXT_(card, 2, "L2VL%4x", cmd->hdr.command); in qeth_l2_send_setdelvlan_cb()
307 QETH_CARD_TEXT_(card, 2, "err%d", cmd->hdr.return_code); in qeth_l2_send_setdelvlan_cb()
312 static int qeth_l2_send_setdelvlan(struct qeth_card *card, __u16 i, in qeth_l2_send_setdelvlan() argument
318 QETH_CARD_TEXT_(card, 4, "L2sdv%x", ipacmd); in qeth_l2_send_setdelvlan()
319 iob = qeth_get_ipacmd_buffer(card, ipacmd, QETH_PROT_IPV4); in qeth_l2_send_setdelvlan()
324 return qeth_send_ipa_cmd(card, iob, in qeth_l2_send_setdelvlan()
328 static void qeth_l2_process_vlans(struct qeth_card *card) in qeth_l2_process_vlans() argument
331 QETH_CARD_TEXT(card, 3, "L2prcvln"); in qeth_l2_process_vlans()
332 spin_lock_bh(&card->vlanlock); in qeth_l2_process_vlans()
333 list_for_each_entry(id, &card->vid_list, list) { in qeth_l2_process_vlans()
334 qeth_l2_send_setdelvlan(card, id->vid, IPA_CMD_SETVLAN); in qeth_l2_process_vlans()
336 spin_unlock_bh(&card->vlanlock); in qeth_l2_process_vlans()
342 struct qeth_card *card = dev->ml_priv; in qeth_l2_vlan_rx_add_vid() local
346 QETH_CARD_TEXT_(card, 4, "aid:%d", vid); in qeth_l2_vlan_rx_add_vid()
349 if (card->info.type == QETH_CARD_TYPE_OSM) { in qeth_l2_vlan_rx_add_vid()
350 QETH_CARD_TEXT(card, 3, "aidOSM"); in qeth_l2_vlan_rx_add_vid()
353 if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { in qeth_l2_vlan_rx_add_vid()
354 QETH_CARD_TEXT(card, 3, "aidREC"); in qeth_l2_vlan_rx_add_vid()
360 rc = qeth_l2_send_setdelvlan(card, vid, IPA_CMD_SETVLAN); in qeth_l2_vlan_rx_add_vid()
365 spin_lock_bh(&card->vlanlock); in qeth_l2_vlan_rx_add_vid()
366 list_add_tail(&id->list, &card->vid_list); in qeth_l2_vlan_rx_add_vid()
367 spin_unlock_bh(&card->vlanlock); in qeth_l2_vlan_rx_add_vid()
378 struct qeth_card *card = dev->ml_priv; in qeth_l2_vlan_rx_kill_vid() local
381 QETH_CARD_TEXT_(card, 4, "kid:%d", vid); in qeth_l2_vlan_rx_kill_vid()
382 if (card->info.type == QETH_CARD_TYPE_OSM) { in qeth_l2_vlan_rx_kill_vid()
383 QETH_CARD_TEXT(card, 3, "kidOSM"); in qeth_l2_vlan_rx_kill_vid()
386 if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { in qeth_l2_vlan_rx_kill_vid()
387 QETH_CARD_TEXT(card, 3, "kidREC"); in qeth_l2_vlan_rx_kill_vid()
390 spin_lock_bh(&card->vlanlock); in qeth_l2_vlan_rx_kill_vid()
391 list_for_each_entry(id, &card->vid_list, list) { in qeth_l2_vlan_rx_kill_vid()
398 spin_unlock_bh(&card->vlanlock); in qeth_l2_vlan_rx_kill_vid()
400 rc = qeth_l2_send_setdelvlan(card, vid, IPA_CMD_DELVLAN); in qeth_l2_vlan_rx_kill_vid()
403 qeth_l2_set_rx_mode(card->dev); in qeth_l2_vlan_rx_kill_vid()
410 struct qeth_card *card = dev->ml_priv; in qeth_l2_fix_features() local
413 if (!qeth_is_supported(card, IPA_OUTBOUND_CHECKSUM)) in qeth_l2_fix_features()
415 if (!qeth_is_supported(card, IPA_INBOUND_CHECKSUM)) in qeth_l2_fix_features()
424 struct qeth_card *card = dev->ml_priv; in qeth_l2_set_features() local
430 if (card->state == CARD_STATE_DOWN || in qeth_l2_set_features()
431 card->state == CARD_STATE_RECOVER) in qeth_l2_set_features()
436 return qeth_set_rx_csum(card, features & NETIF_F_RXCSUM ? 1 : 0); in qeth_l2_set_features()
439 static void qeth_l2_stop_card(struct qeth_card *card, int recovery_mode) in qeth_l2_stop_card() argument
442 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *)); in qeth_l2_stop_card()
444 qeth_set_allowed_threads(card, 0, 1); in qeth_l2_stop_card()
445 if (card->read.state == CH_STATE_UP && in qeth_l2_stop_card()
446 card->write.state == CH_STATE_UP && in qeth_l2_stop_card()
447 (card->state == CARD_STATE_UP)) { in qeth_l2_stop_card()
449 card->info.type != QETH_CARD_TYPE_OSN) { in qeth_l2_stop_card()
450 qeth_l2_stop(card->dev); in qeth_l2_stop_card()
453 dev_close(card->dev); in qeth_l2_stop_card()
456 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED; in qeth_l2_stop_card()
457 card->state = CARD_STATE_SOFTSETUP; in qeth_l2_stop_card()
459 if (card->state == CARD_STATE_SOFTSETUP) { in qeth_l2_stop_card()
460 qeth_l2_del_all_macs(card, 0); in qeth_l2_stop_card()
461 qeth_clear_ipacmd_list(card); in qeth_l2_stop_card()
462 card->state = CARD_STATE_HARDSETUP; in qeth_l2_stop_card()
464 if (card->state == CARD_STATE_HARDSETUP) { in qeth_l2_stop_card()
465 qeth_qdio_clear_card(card, 0); in qeth_l2_stop_card()
466 qeth_clear_qdio_buffers(card); in qeth_l2_stop_card()
467 qeth_clear_working_pool_list(card); in qeth_l2_stop_card()
468 card->state = CARD_STATE_DOWN; in qeth_l2_stop_card()
470 if (card->state == CARD_STATE_DOWN) { in qeth_l2_stop_card()
471 qeth_clear_cmd_buffers(&card->read); in qeth_l2_stop_card()
472 qeth_clear_cmd_buffers(&card->write); in qeth_l2_stop_card()
476 static int qeth_l2_process_inbound_buffer(struct qeth_card *card, in qeth_l2_process_inbound_buffer() argument
487 skb = qeth_core_get_next_skb(card, in qeth_l2_process_inbound_buffer()
488 &card->qdio.in_q->bufs[card->rx.b_index], in qeth_l2_process_inbound_buffer()
489 &card->rx.b_element, &card->rx.e_offset, &hdr); in qeth_l2_process_inbound_buffer()
494 skb->dev = card->dev; in qeth_l2_process_inbound_buffer()
499 if ((card->dev->features & NETIF_F_RXCSUM) in qeth_l2_process_inbound_buffer()
509 *((__u32 *)skb->cb) = ++card->seqno.pkt_seqno; in qeth_l2_process_inbound_buffer()
511 napi_gro_receive(&card->napi, skb); in qeth_l2_process_inbound_buffer()
514 if (card->info.type == QETH_CARD_TYPE_OSN) { in qeth_l2_process_inbound_buffer()
519 card->osn_info.data_cb(skb); in qeth_l2_process_inbound_buffer()
525 QETH_CARD_TEXT(card, 3, "inbunkno"); in qeth_l2_process_inbound_buffer()
531 card->stats.rx_packets++; in qeth_l2_process_inbound_buffer()
532 card->stats.rx_bytes += len; in qeth_l2_process_inbound_buffer()
539 struct qeth_card *card = container_of(napi, struct qeth_card, napi); in qeth_l2_poll() local
545 if (card->options.performance_stats) { in qeth_l2_poll()
546 card->perf_stats.inbound_cnt++; in qeth_l2_poll()
547 card->perf_stats.inbound_start_time = qeth_get_micros(); in qeth_l2_poll()
551 if (!card->rx.b_count) { in qeth_l2_poll()
552 card->rx.qdio_err = 0; in qeth_l2_poll()
553 card->rx.b_count = qdio_get_next_buffers( in qeth_l2_poll()
554 card->data.ccwdev, 0, &card->rx.b_index, in qeth_l2_poll()
555 &card->rx.qdio_err); in qeth_l2_poll()
556 if (card->rx.b_count <= 0) { in qeth_l2_poll()
557 card->rx.b_count = 0; in qeth_l2_poll()
560 card->rx.b_element = in qeth_l2_poll()
561 &card->qdio.in_q->bufs[card->rx.b_index] in qeth_l2_poll()
563 card->rx.e_offset = 0; in qeth_l2_poll()
566 while (card->rx.b_count) { in qeth_l2_poll()
567 buffer = &card->qdio.in_q->bufs[card->rx.b_index]; in qeth_l2_poll()
568 if (!(card->rx.qdio_err && in qeth_l2_poll()
569 qeth_check_qdio_errors(card, buffer->buffer, in qeth_l2_poll()
570 card->rx.qdio_err, "qinerr"))) in qeth_l2_poll()
572 card, new_budget, &done); in qeth_l2_poll()
577 if (card->options.performance_stats) in qeth_l2_poll()
578 card->perf_stats.bufs_rec++; in qeth_l2_poll()
579 qeth_put_buffer_pool_entry(card, in qeth_l2_poll()
581 qeth_queue_input_buffer(card, card->rx.b_index); in qeth_l2_poll()
582 card->rx.b_count--; in qeth_l2_poll()
583 if (card->rx.b_count) { in qeth_l2_poll()
584 card->rx.b_index = in qeth_l2_poll()
585 (card->rx.b_index + 1) % in qeth_l2_poll()
587 card->rx.b_element = in qeth_l2_poll()
588 &card->qdio.in_q in qeth_l2_poll()
589 ->bufs[card->rx.b_index] in qeth_l2_poll()
591 card->rx.e_offset = 0; in qeth_l2_poll()
603 if (qdio_start_irq(card->data.ccwdev, 0)) in qeth_l2_poll()
604 napi_schedule(&card->napi); in qeth_l2_poll()
606 if (card->options.performance_stats) in qeth_l2_poll()
607 card->perf_stats.inbound_time += qeth_get_micros() - in qeth_l2_poll()
608 card->perf_stats.inbound_start_time; in qeth_l2_poll()
612 static int qeth_l2_send_setdelmac(struct qeth_card *card, __u8 *mac, in qeth_l2_send_setdelmac() argument
618 QETH_CARD_TEXT(card, 2, "L2sdmac"); in qeth_l2_send_setdelmac()
619 iob = qeth_get_ipacmd_buffer(card, ipacmd, QETH_PROT_IPV4); in qeth_l2_send_setdelmac()
625 return qeth_send_ipa_cmd(card, iob, NULL, NULL); in qeth_l2_send_setdelmac()
628 static int qeth_l2_send_setmac(struct qeth_card *card, __u8 *mac) in qeth_l2_send_setmac() argument
632 QETH_CARD_TEXT(card, 2, "L2Setmac"); in qeth_l2_send_setmac()
633 rc = qeth_setdel_makerc(card, qeth_l2_send_setdelmac(card, mac, in qeth_l2_send_setmac()
636 card->info.mac_bits |= QETH_LAYER2_MAC_REGISTERED; in qeth_l2_send_setmac()
637 memcpy(card->dev->dev_addr, mac, OSA_ADDR_LEN); in qeth_l2_send_setmac()
638 dev_info(&card->gdev->dev, in qeth_l2_send_setmac()
640 card->dev->dev_addr, card->dev->name); in qeth_l2_send_setmac()
642 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED; in qeth_l2_send_setmac()
645 dev_warn(&card->gdev->dev, in qeth_l2_send_setmac()
649 dev_warn(&card->gdev->dev, in qeth_l2_send_setmac()
657 static int qeth_l2_send_delmac(struct qeth_card *card, __u8 *mac) in qeth_l2_send_delmac() argument
661 QETH_CARD_TEXT(card, 2, "L2Delmac"); in qeth_l2_send_delmac()
662 if (!(card->info.mac_bits & QETH_LAYER2_MAC_REGISTERED)) in qeth_l2_send_delmac()
664 rc = qeth_setdel_makerc(card, qeth_l2_send_setdelmac(card, mac, in qeth_l2_send_delmac()
667 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED; in qeth_l2_send_delmac()
671 static int qeth_l2_request_initial_mac(struct qeth_card *card) in qeth_l2_request_initial_mac() argument
677 QETH_DBF_TEXT_(SETUP, 2, "doL2%s", CARD_BUS_ID(card)); in qeth_l2_request_initial_mac()
679 if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) { in qeth_l2_request_initial_mac()
680 rc = qeth_query_setadapterparms(card); in qeth_l2_request_initial_mac()
684 CARD_BUS_ID(card), rc); in qeth_l2_request_initial_mac()
688 if (card->info.type == QETH_CARD_TYPE_IQD || in qeth_l2_request_initial_mac()
689 card->info.type == QETH_CARD_TYPE_OSM || in qeth_l2_request_initial_mac()
690 card->info.type == QETH_CARD_TYPE_OSX || in qeth_l2_request_initial_mac()
691 card->info.guestlan) { in qeth_l2_request_initial_mac()
692 rc = qeth_setadpparms_change_macaddr(card); in qeth_l2_request_initial_mac()
695 "device %s: x%x\n", CARD_BUS_ID(card), rc); in qeth_l2_request_initial_mac()
699 QETH_DBF_HEX(SETUP, 2, card->dev->dev_addr, OSA_ADDR_LEN); in qeth_l2_request_initial_mac()
701 eth_random_addr(card->dev->dev_addr); in qeth_l2_request_initial_mac()
702 memcpy(card->dev->dev_addr, vendor_pre, 3); in qeth_l2_request_initial_mac()
710 struct qeth_card *card = dev->ml_priv; in qeth_l2_set_mac_address() local
713 QETH_CARD_TEXT(card, 3, "setmac"); in qeth_l2_set_mac_address()
716 QETH_CARD_TEXT(card, 3, "setmcINV"); in qeth_l2_set_mac_address()
720 if (card->info.type == QETH_CARD_TYPE_OSN || in qeth_l2_set_mac_address()
721 card->info.type == QETH_CARD_TYPE_OSM || in qeth_l2_set_mac_address()
722 card->info.type == QETH_CARD_TYPE_OSX) { in qeth_l2_set_mac_address()
723 QETH_CARD_TEXT(card, 3, "setmcTYP"); in qeth_l2_set_mac_address()
726 QETH_CARD_HEX(card, 3, addr->sa_data, OSA_ADDR_LEN); in qeth_l2_set_mac_address()
727 if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { in qeth_l2_set_mac_address()
728 QETH_CARD_TEXT(card, 3, "setmcREC"); in qeth_l2_set_mac_address()
731 rc = qeth_l2_send_delmac(card, &card->dev->dev_addr[0]); in qeth_l2_set_mac_address()
733 rc = qeth_l2_send_setmac(card, addr->sa_data); in qeth_l2_set_mac_address()
737 static void qeth_promisc_to_bridge(struct qeth_card *card) in qeth_promisc_to_bridge() argument
739 struct net_device *dev = card->dev; in qeth_promisc_to_bridge()
744 QETH_CARD_TEXT(card, 3, "pmisc2br"); in qeth_promisc_to_bridge()
746 if (!card->options.sbp.reflect_promisc) in qeth_promisc_to_bridge()
750 if (promisc_mode == card->info.promisc_mode) in qeth_promisc_to_bridge()
754 if (card->options.sbp.reflect_promisc_primary) in qeth_promisc_to_bridge()
761 rc = qeth_bridgeport_setrole(card, role); in qeth_promisc_to_bridge()
765 card->options.sbp.role = role; in qeth_promisc_to_bridge()
766 card->info.promisc_mode = promisc_mode; in qeth_promisc_to_bridge()
775 qeth_l2_add_mac(struct qeth_card *card, struct netdev_hw_addr *ha, u8 is_uc) in qeth_l2_add_mac() argument
779 hash_for_each_possible(card->mac_htable, mac, hnode, in qeth_l2_add_mac()
797 hash_add(card->mac_htable, &mac->hnode, in qeth_l2_add_mac()
804 struct qeth_card *card = dev->ml_priv; in qeth_l2_set_rx_mode() local
811 if (card->info.type == QETH_CARD_TYPE_OSN) in qeth_l2_set_rx_mode()
814 QETH_CARD_TEXT(card, 3, "setmulti"); in qeth_l2_set_rx_mode()
815 if (qeth_threads_running(card, QETH_RECOVER_THREAD) && in qeth_l2_set_rx_mode()
816 (card->state != CARD_STATE_UP)) in qeth_l2_set_rx_mode()
819 spin_lock_bh(&card->mclock); in qeth_l2_set_rx_mode()
822 qeth_l2_add_mac(card, ha, 0); in qeth_l2_set_rx_mode()
825 qeth_l2_add_mac(card, ha, 1); in qeth_l2_set_rx_mode()
827 hash_for_each_safe(card->mac_htable, i, tmp, mac, hnode) { in qeth_l2_set_rx_mode()
830 rc = qeth_l2_send_delgroupmac(card, in qeth_l2_set_rx_mode()
833 rc = qeth_l2_send_setdelmac(card, mac->mac_addr, in qeth_l2_set_rx_mode()
841 rc = qeth_l2_write_mac(card, mac); in qeth_l2_set_rx_mode()
851 spin_unlock_bh(&card->mclock); in qeth_l2_set_rx_mode()
853 if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE)) in qeth_l2_set_rx_mode()
854 qeth_setadp_promisc_mode(card); in qeth_l2_set_rx_mode()
856 qeth_promisc_to_bridge(card); in qeth_l2_set_rx_mode()
864 struct qeth_card *card = dev->ml_priv; in qeth_l2_hard_start_xmit() local
866 int cast_type = qeth_l2_get_cast_type(card, skb); in qeth_l2_hard_start_xmit()
873 if (card->qdio.do_prio_queueing || (cast_type && in qeth_l2_hard_start_xmit()
874 card->info.is_multicast_different)) in qeth_l2_hard_start_xmit()
875 queue = card->qdio.out_qs[qeth_get_priority_queue(card, skb, in qeth_l2_hard_start_xmit()
878 queue = card->qdio.out_qs[card->qdio.default_out_queue]; in qeth_l2_hard_start_xmit()
880 if ((card->state != CARD_STATE_UP) || !card->lan_online) { in qeth_l2_hard_start_xmit()
881 card->stats.tx_carrier_errors++; in qeth_l2_hard_start_xmit()
885 if ((card->info.type == QETH_CARD_TYPE_OSN) && in qeth_l2_hard_start_xmit()
889 if (card->options.performance_stats) { in qeth_l2_hard_start_xmit()
890 card->perf_stats.outbound_cnt++; in qeth_l2_hard_start_xmit()
891 card->perf_stats.outbound_start_time = qeth_get_micros(); in qeth_l2_hard_start_xmit()
895 if (card->info.type == QETH_CARD_TYPE_OSN) in qeth_l2_hard_start_xmit()
898 if (card->info.type == QETH_CARD_TYPE_IQD) { in qeth_l2_hard_start_xmit()
908 qeth_l2_fill_header(card, hdr, new_skb, cast_type); in qeth_l2_hard_start_xmit()
921 qeth_l2_fill_header(card, hdr, new_skb, cast_type); in qeth_l2_hard_start_xmit()
923 qeth_l2_hdr_csum(card, hdr, new_skb); in qeth_l2_hard_start_xmit()
927 elements = qeth_get_elements_no(card, new_skb, elements_needed); in qeth_l2_hard_start_xmit()
934 if (card->info.type != QETH_CARD_TYPE_IQD) { in qeth_l2_hard_start_xmit()
938 rc = qeth_do_send_packet(card, queue, new_skb, hdr, in qeth_l2_hard_start_xmit()
941 rc = qeth_do_send_packet_fast(card, queue, new_skb, hdr, in qeth_l2_hard_start_xmit()
944 card->stats.tx_packets++; in qeth_l2_hard_start_xmit()
945 card->stats.tx_bytes += tx_bytes; in qeth_l2_hard_start_xmit()
962 if (card->options.performance_stats) in qeth_l2_hard_start_xmit()
963 card->perf_stats.outbound_time += qeth_get_micros() - in qeth_l2_hard_start_xmit()
964 card->perf_stats.outbound_start_time; in qeth_l2_hard_start_xmit()
968 card->stats.tx_dropped++; in qeth_l2_hard_start_xmit()
969 card->stats.tx_errors++; in qeth_l2_hard_start_xmit()
979 struct qeth_card *card = dev->ml_priv; in __qeth_l2_open() local
982 QETH_CARD_TEXT(card, 4, "qethopen"); in __qeth_l2_open()
983 if (card->state == CARD_STATE_UP) in __qeth_l2_open()
985 if (card->state != CARD_STATE_SOFTSETUP) in __qeth_l2_open()
988 if ((card->info.type != QETH_CARD_TYPE_OSN) && in __qeth_l2_open()
989 (!(card->info.mac_bits & QETH_LAYER2_MAC_REGISTERED))) { in __qeth_l2_open()
990 QETH_CARD_TEXT(card, 4, "nomacadr"); in __qeth_l2_open()
993 card->data.state = CH_STATE_UP; in __qeth_l2_open()
994 card->state = CARD_STATE_UP; in __qeth_l2_open()
997 if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) { in __qeth_l2_open()
998 napi_enable(&card->napi); in __qeth_l2_open()
999 napi_schedule(&card->napi); in __qeth_l2_open()
1007 struct qeth_card *card = dev->ml_priv; in qeth_l2_open() local
1009 QETH_CARD_TEXT(card, 5, "qethope_"); in qeth_l2_open()
1010 if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { in qeth_l2_open()
1011 QETH_CARD_TEXT(card, 3, "openREC"); in qeth_l2_open()
1019 struct qeth_card *card = dev->ml_priv; in qeth_l2_stop() local
1021 QETH_CARD_TEXT(card, 4, "qethstop"); in qeth_l2_stop()
1023 if (card->state == CARD_STATE_UP) { in qeth_l2_stop()
1024 card->state = CARD_STATE_SOFTSETUP; in qeth_l2_stop()
1025 napi_disable(&card->napi); in qeth_l2_stop()
1032 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_l2_probe_device() local
1035 INIT_LIST_HEAD(&card->vid_list); in qeth_l2_probe_device()
1036 hash_init(card->mac_htable); in qeth_l2_probe_device()
1037 card->options.layer2 = 1; in qeth_l2_probe_device()
1038 card->info.hwtrap = 0; in qeth_l2_probe_device()
1044 struct qeth_card *card = dev_get_drvdata(&cgdev->dev); in qeth_l2_remove_device() local
1047 qeth_set_allowed_threads(card, 0, 1); in qeth_l2_remove_device()
1048 wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0); in qeth_l2_remove_device()
1053 if (card->dev) { in qeth_l2_remove_device()
1054 unregister_netdev(card->dev); in qeth_l2_remove_device()
1055 card->dev = NULL; in qeth_l2_remove_device()
1093 static int qeth_l2_setup_netdev(struct qeth_card *card) in qeth_l2_setup_netdev() argument
1095 switch (card->info.type) { in qeth_l2_setup_netdev()
1097 card->dev = alloc_netdev(0, "hsi%d", NET_NAME_UNKNOWN, in qeth_l2_setup_netdev()
1101 card->dev = alloc_netdev(0, "osn%d", NET_NAME_UNKNOWN, in qeth_l2_setup_netdev()
1103 card->dev->flags |= IFF_NOARP; in qeth_l2_setup_netdev()
1106 card->dev = alloc_etherdev(0); in qeth_l2_setup_netdev()
1109 if (!card->dev) in qeth_l2_setup_netdev()
1112 card->dev->ml_priv = card; in qeth_l2_setup_netdev()
1113 card->dev->watchdog_timeo = QETH_TX_TIMEOUT; in qeth_l2_setup_netdev()
1114 card->dev->mtu = card->info.initial_mtu; in qeth_l2_setup_netdev()
1115 card->dev->netdev_ops = &qeth_l2_netdev_ops; in qeth_l2_setup_netdev()
1116 card->dev->ethtool_ops = in qeth_l2_setup_netdev()
1117 (card->info.type != QETH_CARD_TYPE_OSN) ? in qeth_l2_setup_netdev()
1119 card->dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER; in qeth_l2_setup_netdev()
1120 if (card->info.type == QETH_CARD_TYPE_OSD && !card->info.guestlan) { in qeth_l2_setup_netdev()
1121 card->dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM; in qeth_l2_setup_netdev()
1123 card->dev->features |= NETIF_F_RXCSUM; in qeth_l2_setup_netdev()
1125 card->info.broadcast_capable = 1; in qeth_l2_setup_netdev()
1126 qeth_l2_request_initial_mac(card); in qeth_l2_setup_netdev()
1127 SET_NETDEV_DEV(card->dev, &card->gdev->dev); in qeth_l2_setup_netdev()
1128 netif_napi_add(card->dev, &card->napi, qeth_l2_poll, QETH_NAPI_WEIGHT); in qeth_l2_setup_netdev()
1129 return register_netdev(card->dev); in qeth_l2_setup_netdev()
1132 static int qeth_l2_start_ipassists(struct qeth_card *card) in qeth_l2_start_ipassists() argument
1135 if (qeth_set_access_ctrl_online(card, 0)) in qeth_l2_start_ipassists()
1137 if (qeth_is_supported(card, IPA_INBOUND_CHECKSUM)) in qeth_l2_start_ipassists()
1138 qeth_set_rx_csum(card, 1); in qeth_l2_start_ipassists()
1139 qeth_start_ipa_tx_checksum(card); in qeth_l2_start_ipassists()
1145 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in __qeth_l2_set_online() local
1149 mutex_lock(&card->discipline_mutex); in __qeth_l2_set_online()
1150 mutex_lock(&card->conf_mutex); in __qeth_l2_set_online()
1152 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *)); in __qeth_l2_set_online()
1154 recover_flag = card->state; in __qeth_l2_set_online()
1155 rc = qeth_core_hardsetup_card(card); in __qeth_l2_set_online()
1161 qeth_bridgeport_query_support(card); in __qeth_l2_set_online()
1162 if (card->options.sbp.supported_funcs) in __qeth_l2_set_online()
1163 dev_info(&card->gdev->dev, in __qeth_l2_set_online()
1165 qeth_trace_features(card); in __qeth_l2_set_online()
1167 if (!card->dev && qeth_l2_setup_netdev(card)) { in __qeth_l2_set_online()
1172 if (card->info.type != QETH_CARD_TYPE_OSN) in __qeth_l2_set_online()
1173 qeth_l2_send_setmac(card, &card->dev->dev_addr[0]); in __qeth_l2_set_online()
1175 if (qeth_is_diagass_supported(card, QETH_DIAGS_CMD_TRAP)) { in __qeth_l2_set_online()
1176 if (card->info.hwtrap && in __qeth_l2_set_online()
1177 qeth_hw_trap(card, QETH_DIAGS_TRAP_ARM)) in __qeth_l2_set_online()
1178 card->info.hwtrap = 0; in __qeth_l2_set_online()
1180 card->info.hwtrap = 0; in __qeth_l2_set_online()
1182 qeth_l2_setup_bridgeport_attrs(card); in __qeth_l2_set_online()
1184 card->state = CARD_STATE_HARDSETUP; in __qeth_l2_set_online()
1185 memset(&card->rx, 0, sizeof(struct qeth_rx)); in __qeth_l2_set_online()
1186 qeth_print_status_message(card); in __qeth_l2_set_online()
1191 rc = qeth_send_startlan(card); in __qeth_l2_set_online()
1195 dev_warn(&card->gdev->dev, in __qeth_l2_set_online()
1197 card->lan_online = 0; in __qeth_l2_set_online()
1203 card->lan_online = 1; in __qeth_l2_set_online()
1206 if ((card->info.type == QETH_CARD_TYPE_OSD) || in __qeth_l2_set_online()
1207 (card->info.type == QETH_CARD_TYPE_OSX)) { in __qeth_l2_set_online()
1208 if (qeth_l2_start_ipassists(card)) in __qeth_l2_set_online()
1212 if (card->info.type != QETH_CARD_TYPE_OSN && in __qeth_l2_set_online()
1213 card->info.type != QETH_CARD_TYPE_OSM) in __qeth_l2_set_online()
1214 qeth_l2_process_vlans(card); in __qeth_l2_set_online()
1216 netif_tx_disable(card->dev); in __qeth_l2_set_online()
1218 rc = qeth_init_qdio_queues(card); in __qeth_l2_set_online()
1224 card->state = CARD_STATE_SOFTSETUP; in __qeth_l2_set_online()
1225 if (card->lan_online) in __qeth_l2_set_online()
1226 netif_carrier_on(card->dev); in __qeth_l2_set_online()
1228 netif_carrier_off(card->dev); in __qeth_l2_set_online()
1230 qeth_set_allowed_threads(card, 0xffffffff, 0); in __qeth_l2_set_online()
1233 card->info.type != QETH_CARD_TYPE_OSN) { in __qeth_l2_set_online()
1234 __qeth_l2_open(card->dev); in __qeth_l2_set_online()
1237 dev_open(card->dev); in __qeth_l2_set_online()
1241 qeth_l2_set_rx_mode(card->dev); in __qeth_l2_set_online()
1245 mutex_unlock(&card->conf_mutex); in __qeth_l2_set_online()
1246 mutex_unlock(&card->discipline_mutex); in __qeth_l2_set_online()
1250 qeth_l2_stop_card(card, 0); in __qeth_l2_set_online()
1251 ccw_device_set_offline(CARD_DDEV(card)); in __qeth_l2_set_online()
1252 ccw_device_set_offline(CARD_WDEV(card)); in __qeth_l2_set_online()
1253 ccw_device_set_offline(CARD_RDEV(card)); in __qeth_l2_set_online()
1254 qdio_free(CARD_DDEV(card)); in __qeth_l2_set_online()
1256 card->state = CARD_STATE_RECOVER; in __qeth_l2_set_online()
1258 card->state = CARD_STATE_DOWN; in __qeth_l2_set_online()
1259 mutex_unlock(&card->conf_mutex); in __qeth_l2_set_online()
1260 mutex_unlock(&card->discipline_mutex); in __qeth_l2_set_online()
1272 struct qeth_card *card = dev_get_drvdata(&cgdev->dev); in __qeth_l2_set_offline() local
1276 mutex_lock(&card->discipline_mutex); in __qeth_l2_set_offline()
1277 mutex_lock(&card->conf_mutex); in __qeth_l2_set_offline()
1279 QETH_DBF_HEX(SETUP, 3, &card, sizeof(void *)); in __qeth_l2_set_offline()
1281 if (card->dev && netif_carrier_ok(card->dev)) in __qeth_l2_set_offline()
1282 netif_carrier_off(card->dev); in __qeth_l2_set_offline()
1283 recover_flag = card->state; in __qeth_l2_set_offline()
1284 if ((!recovery_mode && card->info.hwtrap) || card->info.hwtrap == 2) { in __qeth_l2_set_offline()
1285 qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM); in __qeth_l2_set_offline()
1286 card->info.hwtrap = 1; in __qeth_l2_set_offline()
1288 qeth_l2_stop_card(card, recovery_mode); in __qeth_l2_set_offline()
1289 rc = ccw_device_set_offline(CARD_DDEV(card)); in __qeth_l2_set_offline()
1290 rc2 = ccw_device_set_offline(CARD_WDEV(card)); in __qeth_l2_set_offline()
1291 rc3 = ccw_device_set_offline(CARD_RDEV(card)); in __qeth_l2_set_offline()
1296 qdio_free(CARD_DDEV(card)); in __qeth_l2_set_offline()
1298 card->state = CARD_STATE_RECOVER; in __qeth_l2_set_offline()
1301 mutex_unlock(&card->conf_mutex); in __qeth_l2_set_offline()
1302 mutex_unlock(&card->discipline_mutex); in __qeth_l2_set_offline()
1313 struct qeth_card *card; in qeth_l2_recover() local
1316 card = (struct qeth_card *) ptr; in qeth_l2_recover()
1317 QETH_CARD_TEXT(card, 2, "recover1"); in qeth_l2_recover()
1318 if (!qeth_do_run_thread(card, QETH_RECOVER_THREAD)) in qeth_l2_recover()
1320 QETH_CARD_TEXT(card, 2, "recover2"); in qeth_l2_recover()
1321 dev_warn(&card->gdev->dev, in qeth_l2_recover()
1323 qeth_set_recovery_task(card); in qeth_l2_recover()
1324 __qeth_l2_set_offline(card->gdev, 1); in qeth_l2_recover()
1325 rc = __qeth_l2_set_online(card->gdev, 1); in qeth_l2_recover()
1327 dev_info(&card->gdev->dev, in qeth_l2_recover()
1330 qeth_close_dev(card); in qeth_l2_recover()
1331 dev_warn(&card->gdev->dev, "The qeth device driver " in qeth_l2_recover()
1334 qeth_clear_recovery_task(card); in qeth_l2_recover()
1335 qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD); in qeth_l2_recover()
1336 qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD); in qeth_l2_recover()
1353 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_l2_shutdown() local
1354 qeth_set_allowed_threads(card, 0, 1); in qeth_l2_shutdown()
1355 if ((gdev->state == CCWGROUP_ONLINE) && card->info.hwtrap) in qeth_l2_shutdown()
1356 qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM); in qeth_l2_shutdown()
1357 qeth_qdio_clear_card(card, 0); in qeth_l2_shutdown()
1358 qeth_clear_qdio_buffers(card); in qeth_l2_shutdown()
1359 qdio_free(CARD_DDEV(card)); in qeth_l2_shutdown()
1364 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_l2_pm_suspend() local
1366 if (card->dev) in qeth_l2_pm_suspend()
1367 netif_device_detach(card->dev); in qeth_l2_pm_suspend()
1368 qeth_set_allowed_threads(card, 0, 1); in qeth_l2_pm_suspend()
1369 wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0); in qeth_l2_pm_suspend()
1372 if (card->state == CARD_STATE_UP) { in qeth_l2_pm_suspend()
1373 if (card->info.hwtrap) in qeth_l2_pm_suspend()
1374 qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM); in qeth_l2_pm_suspend()
1375 __qeth_l2_set_offline(card->gdev, 1); in qeth_l2_pm_suspend()
1377 __qeth_l2_set_offline(card->gdev, 0); in qeth_l2_pm_suspend()
1383 struct qeth_card *card = dev_get_drvdata(&gdev->dev); in qeth_l2_pm_resume() local
1389 if (card->state == CARD_STATE_RECOVER) { in qeth_l2_pm_resume()
1390 rc = __qeth_l2_set_online(card->gdev, 1); in qeth_l2_pm_resume()
1393 dev_close(card->dev); in qeth_l2_pm_resume()
1397 rc = __qeth_l2_set_online(card->gdev, 0); in qeth_l2_pm_resume()
1399 qeth_set_allowed_threads(card, 0xffffffff, 0); in qeth_l2_pm_resume()
1400 if (card->dev) in qeth_l2_pm_resume()
1401 netif_device_attach(card->dev); in qeth_l2_pm_resume()
1403 dev_warn(&card->gdev->dev, "The qeth device driver " in qeth_l2_pm_resume()
1409 static int qeth_l2_control_event(struct qeth_card *card, in qeth_l2_control_event() argument
1417 qeth_bridge_state_change(card, cmd); in qeth_l2_control_event()
1422 qeth_bridge_host_event(card, cmd); in qeth_l2_control_event()
1446 static int qeth_osn_send_control_data(struct qeth_card *card, int len, in qeth_osn_send_control_data() argument
1452 QETH_CARD_TEXT(card, 5, "osndctrd"); in qeth_osn_send_control_data()
1454 wait_event(card->wait_q, in qeth_osn_send_control_data()
1455 atomic_cmpxchg(&card->write.irq_pending, 0, 1) == 0); in qeth_osn_send_control_data()
1456 qeth_prepare_control_data(card, len, iob); in qeth_osn_send_control_data()
1457 QETH_CARD_TEXT(card, 6, "osnoirqp"); in qeth_osn_send_control_data()
1458 spin_lock_irqsave(get_ccwdev_lock(card->write.ccwdev), flags); in qeth_osn_send_control_data()
1459 rc = ccw_device_start(card->write.ccwdev, &card->write.ccw, in qeth_osn_send_control_data()
1461 spin_unlock_irqrestore(get_ccwdev_lock(card->write.ccwdev), flags); in qeth_osn_send_control_data()
1465 QETH_CARD_TEXT_(card, 2, " err%d", rc); in qeth_osn_send_control_data()
1467 atomic_set(&card->write.irq_pending, 0); in qeth_osn_send_control_data()
1468 wake_up(&card->wait_q); in qeth_osn_send_control_data()
1473 static int qeth_osn_send_ipa_cmd(struct qeth_card *card, in qeth_osn_send_ipa_cmd() argument
1478 QETH_CARD_TEXT(card, 4, "osndipa"); in qeth_osn_send_ipa_cmd()
1480 qeth_prepare_ipa_cmd(card, iob, QETH_PROT_OSN2); in qeth_osn_send_ipa_cmd()
1487 return qeth_osn_send_control_data(card, s1, iob); in qeth_osn_send_ipa_cmd()
1493 struct qeth_card *card; in qeth_osn_assist() local
1498 card = dev->ml_priv; in qeth_osn_assist()
1499 if (!card) in qeth_osn_assist()
1501 QETH_CARD_TEXT(card, 2, "osnsdmc"); in qeth_osn_assist()
1502 if (!qeth_card_hw_is_reachable(card)) in qeth_osn_assist()
1504 iob = qeth_wait_for_buffer(&card->write); in qeth_osn_assist()
1506 rc = qeth_osn_send_ipa_cmd(card, iob, data_len); in qeth_osn_assist()
1515 struct qeth_card *card; in qeth_osn_register() local
1520 card = (*dev)->ml_priv; in qeth_osn_register()
1521 if (!card) in qeth_osn_register()
1523 QETH_CARD_TEXT(card, 2, "osnreg"); in qeth_osn_register()
1526 card->osn_info.assist_cb = assist_cb; in qeth_osn_register()
1527 card->osn_info.data_cb = data_cb; in qeth_osn_register()
1534 struct qeth_card *card; in qeth_osn_deregister() local
1538 card = dev->ml_priv; in qeth_osn_deregister()
1539 if (!card) in qeth_osn_deregister()
1541 QETH_CARD_TEXT(card, 2, "osndereg"); in qeth_osn_deregister()
1542 card->osn_info.assist_cb = NULL; in qeth_osn_deregister()
1543 card->osn_info.data_cb = NULL; in qeth_osn_deregister()
1567 static void qeth_bridge_emit_host_event(struct qeth_card *card, in qeth_bridge_emit_host_event() argument
1612 kobject_uevent_env(&card->gdev->dev.kobj, KOBJ_CHANGE, env); in qeth_bridge_emit_host_event()
1617 struct qeth_card *card; member
1639 mutex_lock(&data->card->conf_mutex); in qeth_bridge_state_change_worker()
1640 data->card->options.sbp.role = entry->role; in qeth_bridge_state_change_worker()
1641 mutex_unlock(&data->card->conf_mutex); in qeth_bridge_state_change_worker()
1654 kobject_uevent_env(&data->card->gdev->dev.kobj, in qeth_bridge_state_change_worker()
1659 static void qeth_bridge_state_change(struct qeth_card *card, in qeth_bridge_state_change() argument
1667 QETH_CARD_TEXT(card, 2, "brstchng"); in qeth_bridge_state_change()
1669 QETH_CARD_TEXT_(card, 2, "BPsz%04x", qports->entry_length); in qeth_bridge_state_change()
1676 QETH_CARD_TEXT(card, 2, "BPSalloc"); in qeth_bridge_state_change()
1680 data->card = card; in qeth_bridge_state_change()
1688 struct qeth_card *card; member
1699 dev_info(&data->card->gdev->dev, in qeth_bridge_host_event_worker()
1701 data->card->dev->name, in qeth_bridge_host_event_worker()
1707 mutex_lock(&data->card->conf_mutex); in qeth_bridge_host_event_worker()
1708 data->card->options.sbp.hostnotification = 0; in qeth_bridge_host_event_worker()
1709 mutex_unlock(&data->card->conf_mutex); in qeth_bridge_host_event_worker()
1710 qeth_bridge_emit_host_event(data->card, anev_abort, in qeth_bridge_host_event_worker()
1716 qeth_bridge_emit_host_event(data->card, in qeth_bridge_host_event_worker()
1724 static void qeth_bridge_host_event(struct qeth_card *card, in qeth_bridge_host_event() argument
1732 QETH_CARD_TEXT(card, 2, "brhostev"); in qeth_bridge_host_event()
1738 QETH_CARD_TEXT_(card, 2, "BPHe%04x", in qeth_bridge_host_event()
1748 QETH_CARD_TEXT(card, 2, "BPHalloc"); in qeth_bridge_host_event()
1752 data->card = card; in qeth_bridge_host_event()
1780 static int qeth_bridgeport_makerc(struct qeth_card *card, in qeth_bridgeport_makerc() argument
1784 int is_iqd = (card->info.type == QETH_CARD_TYPE_IQD); in qeth_bridgeport_makerc()
1799 dev_err(&card->gdev->dev, in qeth_bridgeport_makerc()
1807 dev_err(&card->gdev->dev, in qeth_bridgeport_makerc()
1812 dev_err(&card->gdev->dev, in qeth_bridgeport_makerc()
1822 dev_err(&card->gdev->dev, in qeth_bridgeport_makerc()
1828 dev_err(&card->gdev->dev, in qeth_bridgeport_makerc()
1834 dev_err(&card->gdev->dev, in qeth_bridgeport_makerc()
1840 dev_err(&card->gdev->dev, in qeth_bridgeport_makerc()
1859 QETH_CARD_TEXT_(card, 2, "SBPi%04x", cbctl->ipa_rc); in qeth_bridgeport_makerc()
1860 QETH_CARD_TEXT_(card, 2, "SBPc%04x", cbctl->cmd_rc); in qeth_bridgeport_makerc()
1865 static inline int ipa_cmd_sbp(struct qeth_card *card) in ipa_cmd_sbp() argument
1867 return (card->info.type == QETH_CARD_TYPE_IQD) ? in ipa_cmd_sbp()
1872 static int qeth_bridgeport_query_support_cb(struct qeth_card *card, in qeth_bridgeport_query_support_cb() argument
1877 QETH_CARD_TEXT(card, 2, "brqsupcb"); in qeth_bridgeport_query_support_cb()
1896 static void qeth_bridgeport_query_support(struct qeth_card *card) in qeth_bridgeport_query_support() argument
1902 QETH_CARD_TEXT(card, 2, "brqsuppo"); in qeth_bridgeport_query_support()
1903 iob = qeth_get_ipacmd_buffer(card, ipa_cmd_sbp(card), 0); in qeth_bridgeport_query_support()
1914 if (qeth_send_ipa_cmd(card, iob, qeth_bridgeport_query_support_cb, in qeth_bridgeport_query_support()
1916 qeth_bridgeport_makerc(card, &cbctl, in qeth_bridgeport_query_support()
1919 card->options.sbp.role = QETH_SBP_ROLE_NONE; in qeth_bridgeport_query_support()
1922 card->options.sbp.supported_funcs = cbctl.data.supported; in qeth_bridgeport_query_support()
1925 static int qeth_bridgeport_query_ports_cb(struct qeth_card *card, in qeth_bridgeport_query_ports_cb() argument
1932 QETH_CARD_TEXT(card, 2, "brqprtcb"); in qeth_bridgeport_query_ports_cb()
1939 QETH_CARD_TEXT_(card, 2, "SBPs%04x", qports->entry_length); in qeth_bridgeport_query_ports_cb()
1962 int qeth_bridgeport_query_ports(struct qeth_card *card, in qeth_bridgeport_query_ports() argument
1977 QETH_CARD_TEXT(card, 2, "brqports"); in qeth_bridgeport_query_ports()
1978 if (!(card->options.sbp.supported_funcs & IPA_SBP_QUERY_BRIDGE_PORTS)) in qeth_bridgeport_query_ports()
1980 iob = qeth_get_ipacmd_buffer(card, ipa_cmd_sbp(card), 0); in qeth_bridgeport_query_ports()
1990 rc = qeth_send_ipa_cmd(card, iob, qeth_bridgeport_query_ports_cb, in qeth_bridgeport_query_ports()
1994 return qeth_bridgeport_makerc(card, &cbctl, IPA_SBP_QUERY_BRIDGE_PORTS); in qeth_bridgeport_query_ports()
1998 static int qeth_bridgeport_set_cb(struct qeth_card *card, in qeth_bridgeport_set_cb() argument
2003 QETH_CARD_TEXT(card, 2, "brsetrcb"); in qeth_bridgeport_set_cb()
2016 int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role) in qeth_bridgeport_setrole() argument
2025 QETH_CARD_TEXT(card, 2, "brsetrol"); in qeth_bridgeport_setrole()
2045 if (!(card->options.sbp.supported_funcs & setcmd)) in qeth_bridgeport_setrole()
2047 iob = qeth_get_ipacmd_buffer(card, ipa_cmd_sbp(card), 0); in qeth_bridgeport_setrole()
2055 rc = qeth_send_ipa_cmd(card, iob, qeth_bridgeport_set_cb, in qeth_bridgeport_setrole()
2059 return qeth_bridgeport_makerc(card, &cbctl, setcmd); in qeth_bridgeport_setrole()
2068 static int qeth_anset_makerc(struct qeth_card *card, int pnso_rc, u16 response) in qeth_anset_makerc() argument
2081 dev_err(&card->gdev->dev, in qeth_anset_makerc()
2094 QETH_CARD_TEXT_(card, 2, "SBPp%04x", pnso_rc); in qeth_anset_makerc()
2095 QETH_CARD_TEXT_(card, 2, "SBPr%04x", response); in qeth_anset_makerc()
2103 struct qeth_card *card = (struct qeth_card *)priv; in qeth_bridgeport_an_set_cb() local
2116 qeth_bridge_emit_host_event(card, anev_reg_unreg, code, in qeth_bridgeport_an_set_cb()
2131 int qeth_bridgeport_an_set(struct qeth_card *card, int enable) in qeth_bridgeport_an_set() argument
2138 if (!card) in qeth_bridgeport_an_set()
2140 if (!card->options.sbp.supported_funcs) in qeth_bridgeport_an_set()
2142 ddev = CARD_DDEV(card); in qeth_bridgeport_an_set()
2146 qeth_bridge_emit_host_event(card, anev_reset, 0, NULL, NULL); in qeth_bridgeport_an_set()
2148 qeth_bridgeport_an_set_cb, card); in qeth_bridgeport_an_set()
2151 return qeth_anset_makerc(card, rc, response); in qeth_bridgeport_an_set()