\relax 
\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {1}Device Drivers}{4}}
\@writefile{lof}{\string\addvspace\space {10\p@ }}
\@writefile{lot}{\string\addvspace\space {10\p@ }}
\newlabel{chap-driver}{{1}{4}}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.1}What is a Device Driver?}{4}}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.2}User-space device drivers}{5}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.2.1}Example: {\string\ptt\space vgalib}}{6}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.2.2}Example: mouse conversion}{7}}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.3}Device Driver Basics}{8}}
\newlabel{dev-drv-bas}{{1.3}{8}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.1}Namespace}{8}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.2}Allocating memory}{8}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.3}Character vs.\ block devices}{9}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.4}Interrupts vs. Polling}{10}}
\newlabel{int-poll-basic}{{1.3.4}{10}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.5}The sleep-wakeup mechanism}{11}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.5.1}More advanced sleeping}{13}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.6}The VFS}{13}}
\newlabel{sec-vfs}{{1.3.6}{13}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.1}{\string\pbf\space The {\string\ptt\space lseek()} function}}{14}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.2}{\string\pbf\space The {\string\ptt\space read()} and {\string\ptt\space write()} functions}}{14}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.3}{\string\pbf\space The {\string\ptt\space readdir()} function}}{15}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.4}{\string\pbf\space The {\string\ptt\space select()} function}}{15}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.5}{\string\pbf\space The {\string\ptt\space ioctl()} function}}{17}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.6}{\string\pbf\space The {\string\ptt\space mmap()} function}}{18}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.7}{\string\pbf\space The {\string\ptt\space open()} and {\string\ptt\space release()} functions}}{19}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.3.6.8}{\string\pbf\space The {\string\ptt\space init()} function}}{19}}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.4}Character Device Drivers}{20}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.4.1}Initialization}{20}}
\newlabel{character-initialization}{{1.4.1}{20}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.4.2}Interrupts vs. Polling}{21}}
\newlabel{int-poll-char}{{1.4.2}{21}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.4.3}TTY drivers}{23}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.4.4}Example Drivers}{23}}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.5}Block Device Drivers}{24}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.5.1}Initialization}{24}}
\newlabel{block-initialization}{{1.5.1}{24}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.5.1.1}The file blk.h}{24}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.5.1.2}Recognizing PC standard partitions}{25}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.5.2}The Buffer Cache}{26}}
\newlabel{block-buffer-cache}{{1.5.2}{26}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.5.3}The Strategy Routine}{26}}
\newlabel{block-strategy-routine}{{1.5.3}{26}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.5.4}Example Drivers}{27}}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.6}Supporting Functions}{27}}
\newlabel{sec-dev-funcs}{{1.6}{27}}
\bibstyle{alpha}
\citation{scsi2.standard}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.7}Writing a SCSI Device Driver}{39}}
\newlabel{sec-scsi}{{1.7}{39}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.1}Why You Want to Write a SCSI Driver}{39}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.2}What is SCSI?}{39}}
\citation{lxt.manual}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.7.2.1}SCSI phases}{40}}
\newlabel{sec:status}{{1.7.2.1}{40}}
\newlabel{sec:message}{{1.7.2.1}{40}}
\@writefile{lot}{\string\contentsline\space {table}{\string\numberline\space {1.1}{\ignorespaces SCSI Bus Phase Determination}}{40}}
\newlabel{tab:phase}{{1.1}{40}}
\citation{scsi2.standard}
\@writefile{lot}{\string\contentsline\space {table}{\string\numberline\space {1.2}{\ignorespaces SCSI Status Codes}}{42}}
\newlabel{tab:status}{{1.2}{42}}
\citation{scsi2.standard}
\citation{scsi2.standard}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.3}SCSI Commands}{43}}
\newlabel{sec:scsi.commands}{{1.7.3}{43}}
\@writefile{lot}{\string\contentsline\space {table}{\string\numberline\space {1.3}{\ignorespaces Sense Key Descriptions}}{43}}
\newlabel{tab:sense.keys}{{1.3}{43}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.4}Getting Started}{44}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.5}Before You Begin: Gathering Tools}{44}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.6}The {\string\prm\space \string\psc\space Linux}{} SCSI Interface}{45}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.7}The {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Host} Structure}{45}}
\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1.1}{\ignorespaces Device Driver Header File}}{46}}
\newlabel{fig:header}{{1.1}{46}}
\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1.2}{\ignorespaces The {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Host} Structure}}{46}}
\newlabel{fig:scsi.host}{{1.2}{46}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.7.7.1}Variables in the {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Host} structure}{47}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.1.1}{\string\ptt\space name}}{47}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.1.2}{\string\ptt\space can\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}queue}}{47}}
\newlabel{sec:can.queue}{{1.7.7.1.2}{47}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.1.3}{\string\ptt\space this\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}id}}{47}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.1.4}{\string\ptt\space sg\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}tablesize}}{47}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.1.5}{\string\ptt\space cmd\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}per\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}lun}}{48}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.1.6}{\string\ptt\space present}}{48}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.1.7}{\string\ptt\space unchecked\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}isa\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}dma}}{48}}
\newlabel{sec:dma}{{1.7.7.1.7}{48}}
\citation{norton.guide}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.7.7.2}Functions in the {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Host} Structure}{49}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.1}{\string\ptt\space detect()}}{49}}
\newlabel{sec:detect}{{1.7.7.2.1}{49}}
\@writefile{toc}{\string\contentsline\space {subparagraph}{\string\numberline\space {1.7.7.2.1.1}Requesting the IRQ}{50}}
\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1.3}{\ignorespaces The {\string\ptt\space request\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}irq()} Function}}{51}}
\newlabel{fig:request.irq}{{1.3}{51}}
\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1.4}{\ignorespaces The {\string\ptt\space sigaction} Structure}}{51}}
\newlabel{fig:sigaction}{{1.4}{51}}
\citation{i486.manual}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.2}Requesting the DMA channel}{53}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.3}{\string\ptt\space info()}}{53}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.4}{\string\ptt\space queuecommand()}}{53}}
\newlabel{sec:queuecommand}{{1.7.7.2.4}{53}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.5}{\string\ptt\space done()}}{54}}
\newlabel{sec:done}{{1.7.7.2.5}{54}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.6}{\string\ptt\space command()}}{55}}
\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1.5}{\ignorespaces Example {\string\ptt\space command()} Function}}{56}}
\newlabel{fig:command}{{1.5}{56}}
\citation{lxt.manual}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.7}{\string\ptt\space abort()}}{57}}
\newlabel{sec:abort}{{1.7.7.2.7}{57}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.8}{\string\ptt\space reset()}}{57}}
\newlabel{sec:reset}{{1.7.7.2.8}{57}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.9}{\string\ptt\space slave\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}attach()}}{57}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.7.2.10}{\string\ptt\space bios\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}param()}}{58}}
\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.7.8}The {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Cmnd} Structure}{59}}
\newlabel{sec:scsi.cmnd}{{1.7.8}{59}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.7.8.1}Reserved Areas}{59}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.8.1.1}Informative Variables}{59}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.8.1.2}The Scatter-Gather List}{59}}
\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1.6}{\ignorespaces The {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Cmnd} Structure}}{60}}
\newlabel{fig:scsi.cmnd}{{1.6}{60}}
\@writefile{toc}{\string\contentsline\space {subsubsection}{\string\numberline\space {1.7.8.2}Scratch Areas}{61}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.8.2.1}The {\string\ptt\space scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}done()} Pointer}{61}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.8.2.2}The {\string\ptt\space host\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}scribble} Pointer}{61}}
\@writefile{toc}{\string\contentsline\space {paragraph}{\string\numberline\space {1.7.8.2.3}The {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Pointer} Structure}{61}}
\bibdata{scsi}
\@writefile{lof}{\string\contentsline\space {figure}{\string\numberline\space {1.7}{\ignorespaces The {\string\ptt\space Scsi\unhbox \voidb@x \kern .06em \vbox {\hrule width.3em}Pointer} Structure}}{62}}
\newlabel{fig:scsi.pointer}{{1.7}{62}}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.8}Acknowledgements}{62}}
\bibcite{scsi2.standard}{ANS}
\bibcite{i486.manual}{Int90}
\bibcite{lxt.manual}{LXT91}
\bibcite{norton.guide}{Nor85}
\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.9}Network Device Drivers}{63}}
\global\@namedef{cp@devices/devices}{
\setcounter{page}{64}
\setcounter{equation}{0}
\setcounter{enumi}{4}
\setcounter{enumii}{0}
\setcounter{enumiii}{0}
\setcounter{enumiv}{0}
\setcounter{footnote}{20}
\setcounter{mpfootnote}{0}
\setcounter{part}{0}
\setcounter{chapter}{1}
\setcounter{section}{9}
\setcounter{subsection}{0}
\setcounter{subsubsection}{2}
\setcounter{paragraph}{3}
\setcounter{subparagraph}{0}
\setcounter{figure}{7}
\setcounter{table}{3}
}
