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

📄 misc_scsi.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<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>]) &lt;&lt; <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>]) &lt;&lt; <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>]) &lt;&lt; <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>]) &lt;&lt; <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 &gt;&gt; <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 &gt;&gt; <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 &gt;&gt; <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 &gt;&gt; <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> &lt;&lt; <span class="n">6</span>) &amp; <span class="n">0xC0</span>) | (<a href="/source/s?defs=page_no">page_no</a> &amp; <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>(&amp;<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> &gt; <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>, &amp;<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>(&amp;<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 &lt; <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 + -