@ -880,11 +880,21 @@ static int qeth_l2_stop(struct net_device *dev)
return 0 ;
}
static const struct device_type qeth_l2_devtype = {
. name = " qeth_layer2 " ,
. groups = qeth_l2_attr_groups ,
} ;
static int qeth_l2_probe_device ( struct ccwgroup_device * gdev )
{
struct qeth_card * card = dev_get_drvdata ( & gdev - > dev ) ;
int rc ;
qeth_l2_create_device_attributes ( & gdev - > dev ) ;
if ( gdev - > dev . type = = & qeth_generic_devtype ) {
rc = qeth_l2_create_device_attributes ( & gdev - > dev ) ;
if ( rc )
return rc ;
}
INIT_LIST_HEAD ( & card - > vid_list ) ;
hash_init ( card - > mac_htable ) ;
card - > options . layer2 = 1 ;
@ -896,7 +906,8 @@ static void qeth_l2_remove_device(struct ccwgroup_device *cgdev)
{
struct qeth_card * card = dev_get_drvdata ( & cgdev - > dev ) ;
qeth_l2_remove_device_attributes ( & cgdev - > dev ) ;
if ( cgdev - > dev . type = = & qeth_generic_devtype )
qeth_l2_remove_device_attributes ( & cgdev - > dev ) ;
qeth_set_allowed_threads ( card , 0 , 1 ) ;
wait_event ( card - > wait_q , qeth_threads_running ( card , 0xffffffff ) = = 0 ) ;
@ -954,7 +965,6 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)
case QETH_CARD_TYPE_OSN :
card - > dev = alloc_netdev ( 0 , " osn%d " , NET_NAME_UNKNOWN ,
ether_setup ) ;
card - > dev - > flags | = IFF_NOARP ;
break ;
default :
card - > dev = alloc_etherdev ( 0 ) ;
@ -969,9 +979,12 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)
card - > dev - > min_mtu = 64 ;
card - > dev - > max_mtu = ETH_MAX_MTU ;
card - > dev - > netdev_ops = & qeth_l2_netdev_ops ;
card - > dev - > ethtool_ops =
( card - > info . type ! = QETH_CARD_TYPE_OSN ) ?
& qeth_l2_ethtool_ops : & qeth_l2_osn_ops ;
if ( card - > info . type = = QETH_CARD_TYPE_OSN ) {
card - > dev - > ethtool_ops = & qeth_l2_osn_ops ;
card - > dev - > flags | = IFF_NOARP ;
} else {
card - > dev - > ethtool_ops = & qeth_l2_ethtool_ops ;
}
card - > dev - > features | = NETIF_F_HW_VLAN_CTAG_FILTER ;
if ( card - > info . type = = QETH_CARD_TYPE_OSD & & ! card - > info . guestlan ) {
card - > dev - > hw_features = NETIF_F_SG ;
@ -1269,6 +1282,7 @@ static int qeth_l2_control_event(struct qeth_card *card,
}
struct qeth_discipline qeth_l2_discipline = {
. devtype = & qeth_l2_devtype ,
. start_poll = qeth_qdio_start_poll ,
. input_handler = ( qdio_handler_t * ) qeth_qdio_input_handler ,
. output_handler = ( qdio_handler_t * ) qeth_qdio_output_handler ,