⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trackio.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="hl" name="60">     60 </a> * Progress call back data.<a class="l" name="61">     61 </a> */</span><a class="l" name="62">     62 </a><b>static</b> <a href="/source/s?defs=mutex_t">mutex_t</a>	<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>;<a class="l" name="63">     63 </a><b>static</b> <a href="/source/s?defs=cond_t">cond_t</a>	<a href="/source/s?defs=pcb_cond">pcb_cond</a>;<a class="l" name="64">     64 </a><b>static</b> <a href="/source/s?defs=uchar_t">uchar_t</a>	<a href="/source/s?defs=pcb_user_abort">pcb_user_abort</a>, <a href="/source/s?defs=pcb_done">pcb_done</a>, <a href="/source/s?defs=pcb_synch_initialized">pcb_synch_initialized</a>;<a class="l" name="65">     65 </a><b>static</b> <a href="/source/s?defs=int64_t">int64_t</a>	<a href="/source/s?defs=pcb_completed_io_size">pcb_completed_io_size</a>;<a class="l" name="66">     66 </a><b>static</b> <b>int</b>	(*<a href="/source/s?defs=pcb_cb">pcb_cb</a>)(<a href="/source/s?defs=int64_t">int64_t</a>, <a href="/source/s?defs=int64_t">int64_t</a>);<a class="l" name="67">     67 </a><b>static</b> <a href="/source/s?defs=int64_t">int64_t</a>	<a href="/source/s?defs=pcb_arg">pcb_arg</a>;<a class="l" name="68">     68 </a><a class="l" name="69">     69 </a><b>static</b> <b>void</b><a class="hl" name="70">     70 </a><a href="/source/s?defs=fini_tio_data">fini_tio_data</a>(<b>void</b>)<a class="l" name="71">     71 </a>{<a class="l" name="72">     72 </a>	<b>int</b> i;<a class="l" name="73">     73 </a>	<b>for</b> (i = <span class="n">0</span>; i &lt; <a href="/source/s?defs=NIOBS">NIOBS</a>; i++) {<a class="l" name="74">     74 </a>		<b>if</b> (<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a>) {<a class="l" name="75">     75 </a>			<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a>);<a class="l" name="76">     76 </a>			<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a> = <a href="/source/s?defs=NULL">NULL</a>;<a class="l" name="77">     77 </a>		}<a class="l" name="78">     78 </a>	}<a class="l" name="79">     79 </a>	<b>if</b> (<a href="/source/s?defs=tio_synch_initialized">tio_synch_initialized</a> == <span class="n">1</span>) {<a class="hl" name="80">     80 </a>		(<b>void</b>) <a href="/source/s?defs=mutex_destroy">mutex_destroy</a>(&amp;<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="81">     81 </a>		(<b>void</b>) <a href="/source/s?defs=cond_destroy">cond_destroy</a>(&amp;<a href="/source/s?defs=tio_cond">tio_cond</a>);<a class="l" name="82">     82 </a>		<a href="/source/s?defs=tio_synch_initialized">tio_synch_initialized</a> = <span class="n">0</span>;<a class="l" name="83">     83 </a>	}<a class="l" name="84">     84 </a>	<a href="/source/s?defs=tio_abort">tio_abort</a> = <a href="/source/s?defs=tio_done">tio_done</a> = <span class="n">0</span>;<a class="l" name="85">     85 </a>}<a class="l" name="86">     86 </a><a class="l" name="87">     87 </a><b>static</b> <b>void</b><a class="l" name="88">     88 </a><a href="/source/s?defs=init_tio_data">init_tio_data</a>(<b>int</b> <a href="/source/s?defs=bsize">bsize</a>)<a class="l" name="89">     89 </a>{<a class="hl" name="90">     90 </a>	<b>int</b> i;<a class="l" name="91">     91 </a><a class="l" name="92">     92 </a>	(<b>void</b>) <a href="/source/s?defs=memset">memset</a>(<a href="/source/s?defs=tio_iobs">tio_iobs</a>, <span class="n">0</span>, <b>sizeof</b> (<a href="/source/s?defs=tio_iobs">tio_iobs</a>));<a class="l" name="93">     93 </a>	<b>for</b> (i = <span class="n">0</span>; i &lt; <a href="/source/s?defs=NIOBS">NIOBS</a>; i++) {<a class="l" name="94">     94 </a>		<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=bsize">bsize</a>);<a class="l" name="95">     95 </a>		<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_total_size">iob_total_size</a> = <a href="/source/s?defs=bsize">bsize</a>;<a class="l" name="96">     96 </a>		<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_state">iob_state</a> = <a href="/source/s?defs=IOBS_EMPTY">IOBS_EMPTY</a>;<a class="l" name="97">     97 </a>	}<a class="l" name="98">     98 </a>	(<b>void</b>) <a href="/source/s?defs=mutex_init">mutex_init</a>(&amp;<a href="/source/s?defs=tio_mutex">tio_mutex</a>, <a href="/source/s?defs=USYNC_THREAD">USYNC_THREAD</a>, <span class="n">0</span>);<a class="l" name="99">     99 </a>	(<b>void</b>) <a href="/source/s?defs=cond_init">cond_init</a>(&amp;<a href="/source/s?defs=tio_cond">tio_cond</a>, <a href="/source/s?defs=USYNC_THREAD">USYNC_THREAD</a>, <span class="n">0</span>);<a class="hl" name="100">    100 </a>	<a href="/source/s?defs=tio_synch_initialized">tio_synch_initialized</a> = <span class="n">1</span>;<a class="l" name="101">    101 </a>	<a href="/source/s?defs=tio_abort">tio_abort</a> = <a href="/source/s?defs=tio_done">tio_done</a> = <span class="n">0</span>;<a class="l" name="102">    102 </a>	<a href="/source/s?defs=tio_got_ctrl_c">tio_got_ctrl_c</a> = <span class="n">0</span>;<a class="l" name="103">    103 </a>}<a class="l" name="104">    104 </a><a class="l" name="105">    105 </a><b>static</b> <b>void</b><a class="l" name="106">    106 </a><a href="/source/s?defs=init_pcb_data">init_pcb_data</a>(<b>void</b>)<a class="l" name="107">    107 </a>{<a class="l" name="108">    108 </a>	(<b>void</b>) <a href="/source/s?defs=mutex_init">mutex_init</a>(&amp;<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>, <a href="/source/s?defs=USYNC_THREAD">USYNC_THREAD</a>, <span class="n">0</span>);<a class="l" name="109">    109 </a>	(<b>void</b>) <a href="/source/s?defs=cond_init">cond_init</a>(&amp;<a href="/source/s?defs=pcb_cond">pcb_cond</a>, <a href="/source/s?defs=USYNC_THREAD">USYNC_THREAD</a>, <span class="n">0</span>);<a class="hl" name="110">    110 </a>	<a href="/source/s?defs=pcb_user_abort">pcb_user_abort</a> = <a href="/source/s?defs=pcb_done">pcb_done</a> = <span class="n">0</span>;<a class="l" name="111">    111 </a>	<a href="/source/s?defs=pcb_completed_io_size">pcb_completed_io_size</a> = <span class="n">0</span>;<a class="l" name="112">    112 </a>	<a href="/source/s?defs=pcb_synch_initialized">pcb_synch_initialized</a> = <span class="n">1</span>;<a class="l" name="113">    113 </a>}<a class="l" name="114">    114 </a><a class="l" name="115">    115 </a><b>static</b> <b>void</b><a class="l" name="116">    116 </a><a href="/source/s?defs=fini_pcb_data">fini_pcb_data</a>(<b>void</b>)<a class="l" name="117">    117 </a>{<a class="l" name="118">    118 </a>	<b>if</b> (<a href="/source/s?defs=pcb_synch_initialized">pcb_synch_initialized</a> == <span class="n">1</span>) {<a class="l" name="119">    119 </a>		(<b>void</b>) <a href="/source/s?defs=mutex_destroy">mutex_destroy</a>(&amp;<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>);<a class="hl" name="120">    120 </a>		(<b>void</b>) <a href="/source/s?defs=cond_destroy">cond_destroy</a>(&amp;<a href="/source/s?defs=pcb_cond">pcb_cond</a>);<a class="l" name="121">    121 </a>		<a href="/source/s?defs=pcb_synch_initialized">pcb_synch_initialized</a> = <span class="n">0</span>;<a class="l" name="122">    122 </a>	}<a class="l" name="123">    123 </a>	<a href="/source/s?defs=pcb_user_abort">pcb_user_abort</a> = <a href="/source/s?defs=pcb_done">pcb_done</a> = <span class="n">0</span>;<a class="l" name="124">    124 </a>	<a href="/source/s?defs=pcb_completed_io_size">pcb_completed_io_size</a> = <span class="n">0</span>;<a class="l" name="125">    125 </a>}<a class="l" name="126">    126 </a><a class="l" name="127">    127 </a><span class="c">/* ARGSUSED */</span><a class="l" name="128">    128 </a><b>static</b> <b>void</b> *<a class="l" name="129">    129 </a><a href="/source/s?defs=write_to_cd">write_to_cd</a>(<b>void</b> *<a href="/source/s?defs=arg">arg</a>)<a class="hl" name="130">    130 </a>{<a class="l" name="131">    131 </a>	<b>int</b> i;<a class="l" name="132">    132 </a><a class="l" name="133">    133 </a>	i = <span class="n">0</span>;<a class="l" name="134">    134 </a>#<b>ifndef</b> <a href="/source/s?defs=lint">lint</a><a class="l" name="135">    135 </a>	<b>while</b> (<span class="n">1</span>) {<a class="l" name="136">    136 </a>#<b>endif</b><a class="l" name="137">    137 </a>		(<b>void</b>) <a href="/source/s?defs=mutex_lock">mutex_lock</a>(&amp;<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="138">    138 </a>		<b>while</b> ((<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_state">iob_state</a> != <a href="/source/s?defs=IOBS_READY">IOBS_READY</a>) &amp;&amp;<a class="l" name="139">    139 </a>		    (<a href="/source/s?defs=tio_abort">tio_abort</a> == <span class="n">0</span>)) {<a class="hl" name="140">    140 </a>			<span class="c">/* Wait for buffer to become ready */</span><a class="l" name="141">    141 </a>			(<b>void</b>) <a href="/source/s?defs=cond_wait">cond_wait</a>(&amp;<a href="/source/s?defs=tio_cond">tio_cond</a>, &amp;<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="142">    142 </a>		}<a class="l" name="143">    143 </a>		<b>if</b> (<a href="/source/s?defs=tio_abort">tio_abort</a> == <span class="n">1</span>) {<a class="l" name="144">    144 </a>			<span class="c">/* Do a flush cache before aborting */</span><a class="l" name="145">    145 </a>			(<b>void</b>) <a href="/source/s?defs=flush_cache">flush_cache</a>(<a href="/source/s?defs=tio_fd">tio_fd</a>);<a class="l" name="146">    146 </a>			(<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&amp;<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="147">    147 </a>			<a href="/source/s?defs=thr_exit">thr_exit</a>((<b>void</b> *)<span class="n">1</span>);<a class="l" name="148">    148 </a>		}<a class="l" name="149">    149 </a>		<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_state">iob_state</a> = <a href="/source/s?defs=IOBS_UNDER_DEVICE_IO">IOBS_UNDER_DEVICE_IO</a>;<a class="hl" name="150">    150 </a><a class="l" name="151">    151 </a>		<span class="c">/* If no more data, then close the track */</span><a class="l" name="152">    152 </a>		<b>if</b> (<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_data_size">iob_data_size</a> == <span class="n">0</span>) {<a class="l" name="153">    153 </a>			<b>int</b> <a href="/source/s?defs=retry">retry</a> = <span class="n">20</span>;<a class="l" name="154">    154 </a><a class="l" name="155">    155 </a>			<span class="c">/* Some drives misbehave if flush_cache is not done */</span><a class="l" name="156">    156 </a>			(<b>void</b>) <a href="/source/s?defs=flush_cache">flush_cache</a>(<a href="/source/s?defs=tio_fd">tio_fd</a>);<a class="l" name="157">    157 </a><a class="l" name="158">    158 </a>			<b>if</b> (<a href="/source/s?defs=write_mode">write_mode</a> == <a href="/source/s?defs=TAO_MODE">TAO_MODE</a>) {<a class="l" name="159">    159 </a>				<span class="c">/* Its important to try hard to close track */</span><a class="hl" name="160">    160 </a>				<b>if</b> (<a href="/source/s?defs=simulation">simulation</a>)<a class="l" name="161">    161 </a>					<a href="/source/s?defs=retry">retry</a> = <span class="n">5</span>;<a class="l" name="162">    162 </a><a class="l" name="163">    163 </a>				<b>for</b> (; <a href="/source/s?defs=retry">retry</a> &gt; <span class="n">0</span>; <a href="/source/s?defs=retry">retry</a>--) {<a class="l" name="164">    164 </a><a class="l" name="165">    165 </a>					<span class="c">/* OK to hold mutex when close_track */</span><a class="l" name="166">    166 </a>					<b>if</b> (<a href="/source/s?defs=close_track">close_track</a>(<a href="/source/s?defs=tio_fd">tio_fd</a>,<a class="l" name="167">    167 </a>					    <a href="/source/s?defs=tio_trackno">tio_trackno</a>, <span class="n">0</span>, <span class="n">0</span>))<a class="l" name="168">    168 </a>						<b>break</b>;<a class="l" name="169">    169 </a><a class="hl" name="170">    170 </a>					(<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">1</span>);<a class="l" name="171">    171 </a>				}<a class="l" name="172">    172 </a>			}<a class="l" name="173">    173 </a><a class="l" name="174">    174 </a>			<span class="c">/* Some drives don't allow close track in test write */</span><a class="l" name="175">    175 </a>			<b>if</b> ((<a href="/source/s?defs=retry">retry</a> == <span class="n">0</span>) &amp;&amp; (<a href="/source/s?defs=simulation">simulation</a> == <span class="n">0</span>)) {<a class="l" name="176">    176 </a>				<b>if</b> (<a href="/source/s?defs=errno">errno</a>)<a class="l" name="177">    177 </a>					<a href="/source/s?defs=tio_errno">tio_errno</a> = <a href="/source/s?defs=errno">errno</a>;<a class="l" name="178">    178 </a>				<b>else</b><a class="l" name="179">    179 </a>					<a href="/source/s?defs=tio_errno">tio_errno</a> = -<span class="n">1</span>;<a class="hl" name="180">    180 </a>			}<a class="l" name="181">    181 </a><a class="l" name="182">    182 </a>			<a href="/source/s?defs=tio_done">tio_done</a> = <span class="n">1</span>;<a class="l" name="183">    183 </a>			(<b>void</b>) <a href="/source/s?defs=cond_broadcast">cond_broadcast</a>(&amp;<a href="/source/s?defs=tio_cond">tio_cond</a>);<a class="l" name="184">    184 </a>			(<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&amp;<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="185">    185 </a>			<a href="/source/s?defs=thr_exit">thr_exit</a>((<b>void</b> *)<span class="n">0</span>);<a class="l" name="186">    186 </a>		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -