📄 misc_scsi.c.htm
字号:
<a class="l" name="47"> 47 </a><b>static</b> <b>int</b> <a href="/source/s?defs=check_track_size">check_track_size</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=trk_num">trk_num</a>,<a class="l" name="48"> 48 </a> <b>struct</b> <a href="/source/s?defs=track_info">track_info</a> *<a href="/source/s?defs=tip">tip</a>);<a class="l" name="49"> 49 </a><b>static</b> <b>int</b> <a href="/source/s?defs=rtoc_get_trk_sess_num">rtoc_get_trk_sess_num</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=trk_num">trk_num</a>,<a class="hl" name="50"> 50 </a> <b>int</b> *<a href="/source/s?defs=sess_nump">sess_nump</a>);<a class="l" name="51"> 51 </a><b>static</b> <b>int</b> <a href="/source/s?defs=rtoc_get_sess_last_trk_num">rtoc_get_sess_last_trk_num</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>,<a class="l" name="52"> 52 </a> <b>int</b> <a href="/source/s?defs=sess_num">sess_num</a>, <b>int</b> *<a href="/source/s?defs=last_trk_nump">last_trk_nump</a>);<a class="l" name="53"> 53 </a><b>static</b> <b>int</b> <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>,<a class="l" name="54"> 54 </a> <b>int</b> <a href="/source/s?defs=sess_num">sess_num</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="55"> 55 </a><b>static</b> <a href="/source/s?defs=rtoc_td_t">rtoc_td_t</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 class="l" name="56"> 56 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> <a href="/source/s?defs=adr">adr</a>, <a href="/source/s?defs=uchar_t">uchar_t</a> <a href="/source/s?defs=point">point</a>);<a class="l" name="57"> 57 </a><a class="l" name="58"> 58 </a><a href="/source/s?defs=uint32_t">uint32_t</a><a class="l" name="59"> 59 </a><a href="/source/s?defs=read_scsi32">read_scsi32</a>(<b>void</b> *<a href="/source/s?defs=addr">addr</a>)<a class="hl" name="60"> 60 </a>{<a class="l" name="61"> 61 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=ad">ad</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=addr">addr</a>;<a class="l" name="62"> 62 </a> <a href="/source/s?defs=uint32_t">uint32_t</a> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="63"> 63 </a><a class="l" name="64"> 64 </a> <a href="/source/s?defs=ret">ret</a> = ((((<a href="/source/s?defs=uint32_t">uint32_t</a>)<a href="/source/s?defs=ad">ad</a>[<span class="n">0</span>]) << <span class="n">24</span>) | (((<a href="/source/s?defs=uint32_t">uint32_t</a>)<a href="/source/s?defs=ad">ad</a>[<span class="n">1</span>]) << <span class="n">16</span>) |<a class="l" name="65"> 65 </a> (((<a href="/source/s?defs=uint32_t">uint32_t</a>)<a href="/source/s?defs=ad">ad</a>[<span class="n">2</span>]) << <span class="n">8</span>) | <a href="/source/s?defs=ad">ad</a>[<span class="n">3</span>]);<a class="l" name="66"> 66 </a> <b>return</b> (<a href="/source/s?defs=ret">ret</a>);<a class="l" name="67"> 67 </a>}<a class="l" name="68"> 68 </a><a class="l" name="69"> 69 </a><a href="/source/s?defs=uint16_t">uint16_t</a><a class="hl" name="70"> 70 </a><a href="/source/s?defs=read_scsi16">read_scsi16</a>(<b>void</b> *<a href="/source/s?defs=addr">addr</a>)<a class="l" name="71"> 71 </a>{<a class="l" name="72"> 72 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=ad">ad</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=addr">addr</a>;<a class="l" name="73"> 73 </a> <a href="/source/s?defs=uint16_t">uint16_t</a> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="74"> 74 </a><a class="l" name="75"> 75 </a> <a href="/source/s?defs=ret">ret</a> = ((((<a href="/source/s?defs=uint16_t">uint16_t</a>)<a href="/source/s?defs=ad">ad</a>[<span class="n">0</span>]) << <span class="n">8</span>) | <a href="/source/s?defs=ad">ad</a>[<span class="n">1</span>]);<a class="l" name="76"> 76 </a> <b>return</b> (<a href="/source/s?defs=ret">ret</a>);<a class="l" name="77"> 77 </a>}<a class="l" name="78"> 78 </a><a class="l" name="79"> 79 </a><b>void</b><a class="hl" name="80"> 80 </a><a href="/source/s?defs=load_scsi32">load_scsi32</a>(<b>void</b> *<a href="/source/s?defs=addr">addr</a>, <a href="/source/s?defs=uint32_t">uint32_t</a> v)<a class="l" name="81"> 81 </a>{<a class="l" name="82"> 82 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=ad">ad</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=addr">addr</a>;<a class="l" name="83"> 83 </a><a class="l" name="84"> 84 </a> <a href="/source/s?defs=ad">ad</a>[<span class="n">0</span>] = (<a href="/source/s?defs=uchar_t">uchar_t</a>)(v >> <span class="n">24</span>);<a class="l" name="85"> 85 </a> <a href="/source/s?defs=ad">ad</a>[<span class="n">1</span>] = (<a href="/source/s?defs=uchar_t">uchar_t</a>)(v >> <span class="n">16</span>);<a class="l" name="86"> 86 </a> <a href="/source/s?defs=ad">ad</a>[<span class="n">2</span>] = (<a href="/source/s?defs=uchar_t">uchar_t</a>)(v >> <span class="n">8</span>);<a class="l" name="87"> 87 </a> <a href="/source/s?defs=ad">ad</a>[<span class="n">3</span>] = (<a href="/source/s?defs=uchar_t">uchar_t</a>)v;<a class="l" name="88"> 88 </a>}<a class="l" name="89"> 89 </a><a class="hl" name="90"> 90 </a><b>void</b><a class="l" name="91"> 91 </a><a href="/source/s?defs=load_scsi16">load_scsi16</a>(<b>void</b> *<a href="/source/s?defs=addr">addr</a>, <a href="/source/s?defs=uint16_t">uint16_t</a> v)<a class="l" name="92"> 92 </a>{<a class="l" name="93"> 93 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=ad">ad</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=addr">addr</a>;<a class="l" name="94"> 94 </a> <a href="/source/s?defs=ad">ad</a>[<span class="n">0</span>] = (<a href="/source/s?defs=uchar_t">uchar_t</a>)(v >> <span class="n">8</span>);<a class="l" name="95"> 95 </a> <a href="/source/s?defs=ad">ad</a>[<span class="n">1</span>] = (<a href="/source/s?defs=uchar_t">uchar_t</a>)v;<a class="l" name="96"> 96 </a>}<a class="l" name="97"> 97 </a><span class="c">/*<a class="l" name="98"> 98 </a> * will get the mode page only i.e. will strip off the header.<a class="l" name="99"> 99 </a> */</span><a class="hl" name="100"> 100 </a><b>int</b><a class="l" name="101"> 101 </a><a href="/source/s?defs=get_mode_page">get_mode_page</a>(<b>int</b> <a href="/source/s?defs=fd">fd</a>, <b>int</b> <a href="/source/s?defs=page_no">page_no</a>, <b>int</b> <a href="/source/s?defs=pc">pc</a>, <b>int</b> <a href="/source/s?defs=buf_len">buf_len</a>, <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=buffer">buffer</a>)<a class="l" name="102"> 102 </a>{<a class="l" name="103"> 103 </a> <b>int</b> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="104"> 104 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> <a href="/source/s?defs=byte2">byte2</a>, *<a href="/source/s?defs=buf">buf</a>;<a class="l" name="105"> 105 </a> <a href="/source/s?defs=uint_t">uint_t</a> <a href="/source/s?defs=header_len">header_len</a>, <a href="/source/s?defs=page_len">page_len</a>, <a href="/source/s?defs=copy_cnt">copy_cnt</a>;<a class="l" name="106"> 106 </a><a class="l" name="107"> 107 </a> <a href="/source/s?defs=byte2">byte2</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a>)(((<a href="/source/s?defs=pc">pc</a> << <span class="n">6</span>) & <span class="n">0xC0</span>) | (<a href="/source/s?defs=page_no">page_no</a> & <span class="n">0x3f</span>));<a class="l" name="108"> 108 </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">256</span>);<a class="l" name="109"> 109 </a><a class="hl" name="110"> 110 </a> <span class="c">/* Ask 254 bytes only to make our IDE driver happy */</span><a class="l" name="111"> 111 </a> <a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=mode_sense">mode_sense</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=byte2">byte2</a>, <span class="n">1</span>, <span class="n">254</span>, <a href="/source/s?defs=buf">buf</a>);<a class="l" name="112"> 112 </a> <b>if</b> (<a href="/source/s?defs=ret">ret</a> == <span class="n">0</span>) {<a class="l" name="113"> 113 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=buf">buf</a>);<a class="l" name="114"> 114 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="115"> 115 </a> }<a class="l" name="116"> 116 </a><a class="l" name="117"> 117 </a> <a href="/source/s?defs=header_len">header_len</a> = <span class="n">8</span> + <a href="/source/s?defs=read_scsi16">read_scsi16</a>(&<a href="/source/s?defs=buf">buf</a>[<span class="n">6</span>]);<a class="l" name="118"> 118 </a> <a href="/source/s?defs=page_len">page_len</a> = <a href="/source/s?defs=buf">buf</a>[<a href="/source/s?defs=header_len">header_len</a> + <span class="n">1</span>] + <span class="n">2</span>;<a class="l" name="119"> 119 </a><a class="hl" name="120"> 120 </a> <a href="/source/s?defs=copy_cnt">copy_cnt</a> = (<a href="/source/s?defs=page_len">page_len</a> > <a href="/source/s?defs=buf_len">buf_len</a>) ? <a href="/source/s?defs=buf_len">buf_len</a> : <a href="/source/s?defs=page_len">page_len</a>;<a class="l" name="121"> 121 </a> (<b>void</b>) <a href="/source/s?defs=memcpy">memcpy</a>(<a href="/source/s?defs=buffer">buffer</a>, &<a href="/source/s?defs=buf">buf</a>[<a href="/source/s?defs=header_len">header_len</a>], <a href="/source/s?defs=copy_cnt">copy_cnt</a>);<a class="l" name="122"> 122 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=buf">buf</a>);<a class="l" name="123"> 123 </a><a class="l" name="124"> 124 </a> <b>return</b> (<span class="n">1</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">/*<a class="l" name="128"> 128 </a> * will take care of adding mode header and any extra bytes at the end.<a class="l" name="129"> 129 </a> */</span><a class="hl" name="130"> 130 </a><b>int</b><a class="l" name="131"> 131 </a><a href="/source/s?defs=set_mode_page">set_mode_page</a>(<b>int</b> <a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=buffer">buffer</a>)<a class="l" name="132"> 132 </a>{<a class="l" name="133"> 133 </a> <b>int</b> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="134"> 134 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=buf">buf</a>;<a class="l" name="135"> 135 </a> <a href="/source/s?defs=uint_t">uint_t</a> <a href="/source/s?defs=total">total</a>, <a href="/source/s?defs=p_len">p_len</a>;<a class="l" name="136"> 136 </a><a class="l" name="137"> 137 </a> <a href="/source/s?defs=p_len">p_len</a> = <a href="/source/s?defs=buffer">buffer</a>[<span class="n">1</span>] + <span class="n">2</span>;<a class="l" name="138"> 138 </a> <a href="/source/s?defs=total">total</a> = <a href="/source/s?defs=p_len">p_len</a> + <span class="n">8</span>;<a class="l" name="139"> 139 </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>(<a href="/source/s?defs=total">total</a>);<a class="hl" name="140"> 140 </a><a class="l" name="141"> 141 </a> (<b>void</b>) <a href="/source/s?defs=memcpy">memcpy</a>(&<a href="/source/s?defs=buf">buf</a>[<span class="n">8</span>], <a href="/source/s?defs=buffer">buffer</a>, <a href="/source/s?defs=p_len">p_len</a>);<a class="l" name="142"> 142 </a> <b>if</b> (<a href="/source/s?defs=debug">debug</a>) {<a class="l" name="143"> 143 </a> <b>int</b> i;<a class="l" name="144"> 144 </a><a class="l" name="145"> 145 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"MODE: ["</span>);<a class="l" name="146"> 146 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=p_len">p_len</a>; i++) {<a class="l" name="147"> 147 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"0x%02x "</span>, (<a href="/source/s?defs=uchar_t">uchar_t</a>)<a href="/source/s?defs=buffer">buffer</a>[i]);<a class="l" name="148"> 148 </a> }<a class="l" name="149"> 149 </a><a class="hl" name="150"> 150 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"]\n"</span>);<a class="l" name="151"> 151 </a> }<a class="l" name="152"> 152 </a> <a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=mode_select">mode_select</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=total">total</a>, <a href="/source/s?defs=buf">buf</a>);<a class="l" name="153"> 153 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=buf">buf</a>);<a class="l" name="154"> 154 </a><a class="l" name="155"> 155 </a> <b>return</b> (<a href="/source/s?defs=ret">ret</a>);<a class="l" name="156"> 156 </a>}<a class="l" name="157"> 157 </a><a class="l" name="158"> 158 </a><span class="c">/*<a class="l" name="159"> 159 </a> * Builds track information database for track trackno. If trackno is<a class="hl" name="160"> 160 </a> * -1, builds the database for next blank track.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -