global suspend
host停止一切传输(包括SOF token),在总线上的每一个usb device看到usb bus上空闲状态超过3ms,就会进入suspend状态。
selective suspend
usb总线通过向hub的某个port发送SetPortFeature(PORT_SUSPEND),这样,这个port上的usb device看到port上空闲状态超过3ms,就会进入suspend状态。
通俗点讲,global suspend就是usb bus停止活动,所有的usb device都进入suspend状态,selective suspend就是usb roothub的某个port停止活动,挂在这个port上的usb device就会进入suspend状态。
ehci host controller suspend的时候会调用到两个函数usb_port_suspend和ehci_bus_suspend
usb_port_suspend
set_port_feature(hub->hdev, port1, USB_PORT_FEAT_SUSPEND);
usb_control_msg(hdev, usb_sndctrlpipe(hdev, 0),
USB_REQ_SET_FEATURE, USB_RT_PORT, feature, port1,
NULL, 0, 1000);