\begin{figure}
%\scriptsize 
{\fontsize{7.3}{8.3}\selectfont
{\sf
  \begin{itemize}
  \item Either, a new device is inserted into one of the
    USB ports: 
    \begin{enumerate}
    \item HCD notifies the USB manager that a device is inserted.
    \item The manager reads the USB device descriptor (via HCD) that contains
      the number of configurations, device protocol, class and other
      information.
    \item The manager reads each configuration reported by the above
      descriptor, which contain information about power requirements,
      interfaces and endpoints. The configurations are read twice: at
      first, to determine the total length of data needed to read
      interface and endpoint descriptors and subsequently to fetch all
      interface and endpoint descriptors.
      \item The manager switches the device into addressed mode and
        crosschecks that by reading device descriptor again. 
      \item The manager assigns a configuration and interfaces to the 
        device, which can be later changed by device driver. 
        \item The manager locates appropriate client driver by
          querying System Knowledge Base (SKB). If a match is found,
          SKB returns the server name running the required driver. 
        \item The manager probes the driver if it accepts the new
          device or not.
          \begin{itemize}
          \item If the driver accepts the request, it requests the
            manager to establish a logical connection (pipe) with the
            device. The pipe is subsequently controlled by HCD.
            \item If the driver rejects the request, the manager
              cleans up its resources.   
            \end{itemize}
          \end{enumerate}
\item OR, a USB device is removed from a port:
\begin{enumerate}
\item HCD notifies USB manager the device is removed.
\item The manager cleans up its resources and notifies the client 
  driver.
\end{enumerate}
\end{itemize}
}}
\vspace{-3mm}
\caption{Distributed USB PlugUnplug protocol from Barrelfush
  multi-kernel OS.}
\label{fig:multios-usb}
\end{figure} 
%\normalsize

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "main"
%%% End: 
