GCT GDM72xx WiMAX chip (4)
usb ドライバよく分からない。なんとなくですが何でも usb_submit_urb で済ませちゃってる感じがしてこれもある意味抽象化のお陰だとは思うのですが、ぶっちゃけ微妙。
例えば、struct net_device_ops な構造体に設定されているナニを見てみるに
static struct net_device_ops gdm_netdev_ops = { .ndo_open = gdm_wimax_open, .ndo_stop = gdm_wimax_close, .ndo_set_config = gdm_wimax_set_config, .ndo_start_xmit = gdm_wimax_tx, .ndo_get_stats = gdm_wimax_stats, .ndo_set_mac_address = gdm_wimax_set_mac_addr, .ndo_do_ioctl = gdm_wimax_ioctl, };
.ndo_start_xmit 属性は netdevice.h のコメントによれば
* netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb,
* struct net_device *dev);
* Called when a packet needs to be transmitted.
とのこと。確認というか掘削してみます。
gdm_wimax_tx 手続き
細かい部分はスルーで、CONFIG_WIMAX_GDM72XX_QOS は未定義として以下が呼び出されます。
ret = gdm_wimax_send_tx(skb, dev);
この手続きは以下な手続き呼び出しが主処理にあたるのかどうか。
ret = gdm_wimax_send_with_cb(nic, skb->data, skb->len, tx_complete, nic);
そして上記手続き呼び出しは以下なマクロ定義にあたる模様。
#define gdm_wimax_send_with_cb(n, d, l, c, b) \ (n->phy_dev->send_func)(n->phy_dev->priv_dev, d, l, c, b)
ええと、nic->phy_dev->send_func は何が設定されているかというと昨日エントリによれば gdm_usb.c の gdm_usb_probe 手続きで gdm_usb_send 手続きが設定されてますね。
このあたり
簡単にスルーせずにきちんと確認する必要があるように感じます。が今日はここで限界。