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

📄 misc_scsi.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="389">    389 </a>    <b>int</b> *<a href="/source/s?defs=last_trk_nump">last_trk_nump</a>)<a class="hl" name="390">    390 </a>{<a class="l" name="391">    391 </a>	<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a href="/source/s?defs=tdp">tdp</a> = (<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *)(<a href="/source/s?defs=rtoc">rtoc</a> + <b>sizeof</b> (<a href="/source/s?defs=rtoc_hdr_t">rtoc_hdr_t</a>));<a class="l" name="392">    392 </a>	<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a href="/source/s?defs=last_tdp">last_tdp</a> = (<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *)(<a href="/source/s?defs=rtoc">rtoc</a> + <a href="/source/s?defs=rtoc_len">rtoc_len</a> -<a class="l" name="393">    393 </a>	    <b>sizeof</b> (<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a>));<a class="l" name="394">    394 </a><a class="l" name="395">    395 </a>	<b>while</b> ((<a href="/source/s?defs=tdp">tdp</a> = <a href="/source/s?defs=get_rtoc_td">get_rtoc_td</a>(<a href="/source/s?defs=tdp">tdp</a>, <a href="/source/s?defs=last_tdp">last_tdp</a>, <a href="/source/s?defs=Q_MODE_1">Q_MODE_1</a>,<a class="l" name="396">    396 </a>	    <a href="/source/s?defs=POINT_SESS_LAST_TRK">POINT_SESS_LAST_TRK</a>)) != <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="397">    397 </a>		<b>if</b> (<a href="/source/s?defs=tdp">tdp</a>-&gt;<a href="/source/s?defs=rt_session_num">rt_session_num</a> == <a href="/source/s?defs=sess_num">sess_num</a>) {<a class="l" name="398">    398 </a>			*<a href="/source/s?defs=last_trk_nump">last_trk_nump</a> = <a href="/source/s?defs=tdp">tdp</a>-&gt;<a href="/source/s?defs=rt_pmin">rt_pmin</a>;<a class="l" name="399">    399 </a>			<b>return</b> (<span class="n">1</span>);<a class="hl" name="400">    400 </a>		} <b>else</b> {<a class="l" name="401">    401 </a>			++<a href="/source/s?defs=tdp">tdp</a>;<a class="l" name="402">    402 </a>		}<a class="l" name="403">    403 </a>	}<a class="l" name="404">    404 </a><a class="l" name="405">    405 </a>	<b>return</b> (<span class="n">0</span>);<a class="l" name="406">    406 </a>}<a class="l" name="407">    407 </a><a class="l" name="408">    408 </a><span class="c">/*<a class="l" name="409">    409 </a> * Determine the starting LBA of the the session leadout by parsing the Raw TOC<a class="hl" name="410">    410 </a> * format of the READ <a href="/source/s?path=TOC/">TOC</a>/<a href="/source/s?path=TOC/PMA/">PMA</a>/<a href="/source/s?path=TOC/PMA/ATIP">ATIP</a> command response data.<a class="l" name="411">    411 </a> */</span><a class="l" name="412">    412 </a><b>static</b> <b>int</b><a class="l" name="413">    413 </a><a href="/source/s?defs=rtoc_get_sess_leadout_lba">rtoc_get_sess_leadout_lba</a>(<a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=rtoc">rtoc</a>, <a href="/source/s?defs=size_t">size_t</a> <a href="/source/s?defs=rtoc_len">rtoc_len</a>, <b>int</b> <a href="/source/s?defs=sess_num">sess_num</a>,<a class="l" name="414">    414 </a>    <a href="/source/s?defs=uint32_t">uint32_t</a> *<a href="/source/s?defs=leadout_lba">leadout_lba</a>)<a class="l" name="415">    415 </a>{<a class="l" name="416">    416 </a>	<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a href="/source/s?defs=tdp">tdp</a> = (<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *)(<a href="/source/s?defs=rtoc">rtoc</a> + <b>sizeof</b> (<a href="/source/s?defs=rtoc_hdr_t">rtoc_hdr_t</a>));<a class="l" name="417">    417 </a>	<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a href="/source/s?defs=last_tdp">last_tdp</a> = (<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *)(<a href="/source/s?defs=rtoc">rtoc</a> + <a href="/source/s?defs=rtoc_len">rtoc_len</a> -<a class="l" name="418">    418 </a>	    <b>sizeof</b> (<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a>));<a class="l" name="419">    419 </a><a class="hl" name="420">    420 </a>	<b>while</b> ((<a href="/source/s?defs=tdp">tdp</a> = <a href="/source/s?defs=get_rtoc_td">get_rtoc_td</a>(<a href="/source/s?defs=tdp">tdp</a>, <a href="/source/s?defs=last_tdp">last_tdp</a>, <a href="/source/s?defs=Q_MODE_1">Q_MODE_1</a>,<a class="l" name="421">    421 </a>	    <a href="/source/s?defs=POINT_LEADOUT_ADDR">POINT_LEADOUT_ADDR</a>)) != <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="422">    422 </a>		<b>if</b> (<a href="/source/s?defs=tdp">tdp</a>-&gt;<a href="/source/s?defs=rt_session_num">rt_session_num</a> == <a href="/source/s?defs=sess_num">sess_num</a>) {<a class="l" name="423">    423 </a>			*<a href="/source/s?defs=leadout_lba">leadout_lba</a> = <a href="/source/s?defs=MSF2LBA">MSF2LBA</a>(<a href="/source/s?defs=tdp">tdp</a>-&gt;<a href="/source/s?defs=rt_pmin">rt_pmin</a>, <a href="/source/s?defs=tdp">tdp</a>-&gt;<a href="/source/s?defs=rt_psec">rt_psec</a>,<a class="l" name="424">    424 </a>			    <a href="/source/s?defs=tdp">tdp</a>-&gt;<a href="/source/s?defs=rt_pframe">rt_pframe</a>);<a class="l" name="425">    425 </a>			<b>return</b> (<span class="n">1</span>);<a class="l" name="426">    426 </a>		} <b>else</b> {<a class="l" name="427">    427 </a>			++<a href="/source/s?defs=tdp">tdp</a>;<a class="l" name="428">    428 </a>		}<a class="l" name="429">    429 </a>	}<a class="hl" name="430">    430 </a><a class="l" name="431">    431 </a>	<b>return</b> (<span class="n">0</span>);<a class="l" name="432">    432 </a>}<a class="l" name="433">    433 </a><a class="l" name="434">    434 </a><span class="c">/*<a class="l" name="435">    435 </a> * Search a set of Raw TOC Track Descriptors using &lt;'adr', 'point'&gt; as the<a class="l" name="436">    436 </a> * search key. Return a pointer to the first Track Descriptor that matches.<a class="l" name="437">    437 </a> */</span><a class="l" name="438">    438 </a><b>static</b> <a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a class="l" name="439">    439 </a><a href="/source/s?defs=get_rtoc_td">get_rtoc_td</a>(<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a href="/source/s?defs=begin_tdp">begin_tdp</a>, <a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a href="/source/s?defs=end_tdp">end_tdp</a>, <a href="/source/s?defs=uchar_t">uchar_t</a> <a href="/source/s?defs=adr">adr</a>,<a class="hl" name="440">    440 </a>    <a href="/source/s?defs=uchar_t">uchar_t</a> <a href="/source/s?defs=point">point</a>)<a class="l" name="441">    441 </a>{<a class="l" name="442">    442 </a>	<a href="/source/s?defs=rtoc_td_t">rtoc_td_t</a> *<a href="/source/s?defs=cur_tdp">cur_tdp</a> = <a href="/source/s?defs=begin_tdp">begin_tdp</a>;<a class="l" name="443">    443 </a><a class="l" name="444">    444 </a>	<b>while</b> (<a href="/source/s?defs=cur_tdp">cur_tdp</a> &lt;= <a href="/source/s?defs=end_tdp">end_tdp</a>) {<a class="l" name="445">    445 </a>		<b>if</b> ((<a href="/source/s?defs=cur_tdp">cur_tdp</a>-&gt;<a href="/source/s?defs=rt_adr">rt_adr</a> == <a href="/source/s?defs=adr">adr</a>) &amp;&amp; (<a href="/source/s?defs=cur_tdp">cur_tdp</a>-&gt;<a href="/source/s?defs=rt_point">rt_point</a> == <a href="/source/s?defs=point">point</a>))<a class="l" name="446">    446 </a>			<b>return</b> (<a href="/source/s?defs=cur_tdp">cur_tdp</a>);<a class="l" name="447">    447 </a>		<b>else</b><a class="l" name="448">    448 </a>			<a href="/source/s?defs=cur_tdp">cur_tdp</a>++;<a class="l" name="449">    449 </a>	}<a class="hl" name="450">    450 </a><a class="l" name="451">    451 </a>	<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="452">    452 </a>}<a class="l" name="453">    453 </a><a class="l" name="454">    454 </a><a href="/source/s?defs=uchar_t">uchar_t</a><a class="l" name="455">    455 </a><a href="/source/s?defs=get_data_mode">get_data_mode</a>(<b>int</b> <a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=uint32_t">uint32_t</a> <a href="/source/s?defs=lba">lba</a>)<a class="l" name="456">    456 </a>{<a class="l" name="457">    457 </a>	<b>int</b> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="458">    458 </a>	<a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=buf">buf</a>;<a class="l" name="459">    459 </a>	<a href="/source/s?defs=uchar_t">uchar_t</a> <a href="/source/s?defs=mode">mode</a>;<a class="hl" name="460">    460 </a><a class="l" name="461">    461 </a>	<a href="/source/s?defs=buf">buf</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<span class="n">8</span>);<a class="l" name="462">    462 </a>	<a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=read_header">read_header</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=lba">lba</a>, <a href="/source/s?defs=buf">buf</a>);<a class="l" name="463">    463 </a>	<b>if</b> (<a href="/source/s?defs=ret">ret</a> == <span class="n">0</span>)<a class="l" name="464">    464 </a>		<a href="/source/s?defs=mode">mode</a> = <span class="n">0xff</span>;<a class="l" name="465">    465 </a>	<b>else</b><a class="l" name="466">    466 </a>		<a href="/source/s?defs=mode">mode</a> = <a href="/source/s?defs=buf">buf</a>[<span class="n">0</span>];<a class="l" name="467">    467 </a>	<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=buf">buf</a>);<a class="l" name="468">    468 </a>	<b>return</b> (<a href="/source/s?defs=mode">mode</a>);<a class="l" name="469">    469 </a>}<a class="hl" name="470">    470 </a><a class="l" name="471">    471 </a><span class="c">/*<a class="l" name="472">    472 </a> * Set page code 5 for TAO mode.<a class="l" name="473">    473 </a> */</span><a class="l" name="474">    474 </a><b>int</b><a class="l" name="475">    475 </a><a href="/source/s?defs=prepare_for_write">prepare_for_write</a>(<a href="/source/s?defs=cd_device">cd_device</a> *<a href="/source/s?defs=dev">dev</a>, <b>int</b> <a href="/source/s?defs=track_mode">track_mode</a>, <b>int</b> <a href="/source/s?defs=test_write">test_write</a>,<a class="l" name="476">    476 </a>    <b>int</b> <a href="/source/s?defs=keep_disc_open">keep_disc_open</a>)<a class="l" name="477">    477 </a>{<a class="l" name="478">    478 </a>	<a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=buf">buf</a>;<a class="l" name="479">    479 </a>	<b>int</b> <a href="/source/s?defs=no_err">no_err</a>;<a class="hl" name="480">    480 </a>	<b>int</b> <a href="/source/s?defs=reset_device">reset_device</a>;<a class="l" name="481">    481 </a><a class="l" name="482">    482 </a>	<b>if</b> ((<a href="/source/s?defs=write_mode">write_mode</a> == <a href="/source/s?defs=DAO_MODE">DAO_MODE</a>) &amp;&amp; <a href="/source/s?defs=keep_disc_open">keep_disc_open</a>) {<a class="l" name="483">    483 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="484">    484 </a>		    <span class="s">"Multi-session is not supported on DVD media\n"</span>));<a class="l" name="485">    485 </a>		<a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="486">    486 </a>	}<a class="l" name="487">    487 </a><a class="l" name="488">    488 </a>	<b>if</b> ((<a href="/source/s?defs=write_mode">write_mode</a> == <a href="/source/s?defs=DAO_MODE">DAO_MODE</a>) &amp;&amp; <a href="/source/s?defs=debug">debug</a>) {<a class="l" name="489">    489 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"Preparing to write in DAO\n"</span>);<a class="hl" name="490">    490 </a>	}<a class="l" name="491">    491 </a><a class="l" name="492">    492 </a>	(<b>void</b>) <a href="/source/s?defs=start_stop">start_stop</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a>, <span class="n">1</span>);<a class="l" name="493">    493 </a>	<span class="c">/* Some drives do not support this command but still do it */</span><a class="l" name="494">    494 </a>	(<b>void</b>) <a href="/source/s?defs=rezero_unit">rezero_unit</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a>);<a class="l" name="495">    495 </a><a class="l" name="496">    496 </a>	<a href="/source/s?defs=buf">buf</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<span class="n">64</span>);<a class="l" name="497">    497 </a><a class="l" name="498">    498 </a>	<a href="/source/s?defs=no_err">no_err</a> = <a href="/source/s?defs=get_mode_page">get_mode_page</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a>, <span class="n">5</span>, <span class="n">0</span>, <span class="n">64</span>, <a href="/source/s?defs=buf">buf</a>);<a class="l" name="499">    499 </a>	<b>if</b> (<a href="/source/s?defs=no_err">no_err</a>)<a class="hl" name="500">    500 </a>		<a href="/source/s?defs=no_err">no_err</a> = ((<a href="/source/s?defs=buf">buf</a>[<span class="n">1</span>] + <span class="n">2</span>) &gt; <s

⌨️ 快捷键说明

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