📄 misc_scsi.c.htm
字号:
<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>-><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>-><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>-><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>-><a href="/source/s?defs=rt_pmin">rt_pmin</a>, <a href="/source/s?defs=tdp">tdp</a>-><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>-><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 <'adr', 'point'> 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> <= <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>-><a href="/source/s?defs=rt_adr">rt_adr</a> == <a href="/source/s?defs=adr">adr</a>) && (<a href="/source/s?defs=cur_tdp">cur_tdp</a>-><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>) && <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>) && <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>-><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>-><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>-><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>) > <s
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -