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

📄 device.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="175">    175 </a>		<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=cap">cap</a>);<a class="l" name="176">    176 </a>	}<a class="l" name="177">    177 </a><a class="l" name="178">    178 </a>	<span class="c">/* Detect if it's a Lite-ON drive with a streaming CD problem */</span><a class="l" name="179">    179 </a>	<b>if</b> ((<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"LITE-ON"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">8</span>], <span class="n">7</span>) == <span class="n">0</span>) &amp;&amp;<a class="hl" name="180">    180 </a>	    (<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"LTR-48"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">16</span>], <span class="n">6</span>) == <span class="n">0</span>)) {<a class="l" name="181">    181 </a>		<a href="/source/s?defs=use_cd_speed">use_cd_speed</a> = <span class="n">1</span>;<a class="l" name="182">    182 </a>	}<a class="l" name="183">    183 </a><a class="l" name="184">    184 </a>	<span class="c">/*<a class="l" name="185">    185 </a>	 * a workaround for the firmware problem in LITE-ON COMBO drives.<a class="l" name="186">    186 </a>	 * streaming for these drives sets it only to max speed regardless<a class="l" name="187">    187 </a>	 * of requested speed. cd_speed_ctrl allow speeds less than max<a class="l" name="188">    188 </a>	 * to be set but not max thus the code below. (x48 is max speed<a class="l" name="189">    189 </a>	 * for these drives).<a class="hl" name="190">    190 </a>	 */</span><a class="l" name="191">    191 </a>	<b>if</b> ((<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"LITE-ON"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">8</span>], <span class="n">7</span>) == <span class="n">0</span>) &amp;&amp;<a class="l" name="192">    192 </a>	    (<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"COMBO SOHC-4836VS"</span>,<a class="l" name="193">    193 </a>	    (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">16</span>], <span class="n">17</span>) == <span class="n">0</span>))<a class="l" name="194">    194 </a>		<b>if</b> (<a href="/source/s?defs=requested_speed">requested_speed</a> &lt; <span class="n">48</span>)<a class="l" name="195">    195 </a>			<a href="/source/s?defs=use_cd_speed">use_cd_speed</a> = <span class="n">1</span>;<a class="l" name="196">    196 </a><a class="l" name="197">    197 </a>	<a href="/source/s?defs=cap">cap</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="198">    198 </a>	<b>if</b> (<a href="/source/s?defs=is_old_sun_drive">is_old_sun_drive</a>(<a href="/source/s?defs=dev">dev</a>)) {<a class="l" name="199">    199 </a>		<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_read_audio">d_read_audio</a> = <a href="/source/s?defs=toshiba_read_audio">toshiba_read_audio</a>;<a class="hl" name="200">    200 </a>		<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_speed_ctrl">d_speed_ctrl</a> = <a href="/source/s?defs=toshiba_speed_ctrl">toshiba_speed_ctrl</a>;<a class="l" name="201">    201 </a>	} <b>else</b> {<a class="l" name="202">    202 </a>		<span class="c">/*<a class="l" name="203">    203 </a>		 * If the CD Read Feature is supported, READ CD will work<a class="l" name="204">    204 </a>		 * and will return jitter free audio data. Otherwise, look<a class="l" name="205">    205 </a>		 * at Page Code 2A for this information.<a class="l" name="206">    206 </a>		 */</span><a class="l" name="207">    207 </a>		<b>if</b> (<a href="/source/s?defs=ftr_supported">ftr_supported</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=MMC_FTR_CD_READ">MMC_FTR_CD_READ</a>) == <span class="n">1</span>) {<a class="l" name="208">    208 </a>			<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_read_audio">d_read_audio</a> = <a href="/source/s?defs=read_audio_through_read_cd">read_audio_through_read_cd</a>;<a class="l" name="209">    209 </a>			<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_cap">d_cap</a> |= <a href="/source/s?defs=DEV_CAP_ACCURATE_CDDA">DEV_CAP_ACCURATE_CDDA</a>;<a class="hl" name="210">    210 </a>		} <b>else</b> <b>if</b> (<a href="/source/s?defs=get_mode_page">get_mode_page</a>(<a href="/source/s?defs=fd">fd</a>, <span class="n">0x2A</span>, <span class="n">0</span>, <span class="n">8</span>, <a href="/source/s?defs=cap">cap</a>)) {<a class="l" name="211">    211 </a>			<b>if</b> (<a href="/source/s?defs=cap">cap</a>[<span class="n">5</span>] &amp; <span class="n">1</span>) {<a class="l" name="212">    212 </a>				<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_read_audio">d_read_audio</a> = <a href="/source/s?defs=read_audio_through_read_cd">read_audio_through_read_cd</a>;<a class="l" name="213">    213 </a>				<b>if</b> (<a href="/source/s?defs=cap">cap</a>[<span class="n">5</span>] &amp; <span class="n">2</span>)<a class="l" name="214">    214 </a>					<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_cap">d_cap</a> |= <a href="/source/s?defs=DEV_CAP_ACCURATE_CDDA">DEV_CAP_ACCURATE_CDDA</a>;<a class="l" name="215">    215 </a>			}<a class="l" name="216">    216 </a>		}<a class="l" name="217">    217 </a>		<span class="c">/*<a class="l" name="218">    218 </a>		 * If the Real Time Streaming Feature is supported then<a class="l" name="219">    219 </a>		 * Real-time streaming commands can be used for speed control<a class="hl" name="220">    220 </a>		 * (except when we want to use cd_speed_ctrl explicitly which<a class="l" name="221">    221 </a>		 * is specified by setting use_cd_speed to 1).<a class="l" name="222">    222 </a>		 * Otherwise try SET CD SPEED.<a class="l" name="223">    223 </a>		 */</span><a class="l" name="224">    224 </a>		<b>if</b> ((<a href="/source/s?defs=ftr_supported">ftr_supported</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=MMC_FTR_RT_STREAM">MMC_FTR_RT_STREAM</a>) == <span class="n">1</span>) &amp;&amp;<a class="l" name="225">    225 </a>		    !<a href="/source/s?defs=use_cd_speed">use_cd_speed</a>) {<a class="l" name="226">    226 </a>			<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_speed_ctrl">d_speed_ctrl</a> = <a href="/source/s?defs=rt_streaming_ctrl">rt_streaming_ctrl</a>;<a class="l" name="227">    227 </a>			<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="228">    228 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"using rt speed ctrl\n"</span>);<a class="l" name="229">    229 </a>		} <b>else</b> {<a class="hl" name="230">    230 </a>			<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_speed_ctrl">d_speed_ctrl</a> = <a href="/source/s?defs=cd_speed_ctrl">cd_speed_ctrl</a>;<a class="l" name="231">    231 </a>			<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="232">    232 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"using cd speed ctrl\n"</span>);<a class="l" name="233">    233 </a>		}<a class="l" name="234">    234 </a>	}<a class="l" name="235">    235 </a>	<b>if</b> (<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_read_audio">d_read_audio</a> != <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="236">    236 </a>		<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_cap">d_cap</a> |= <a href="/source/s?defs=DEV_CAP_EXTRACT_CDDA">DEV_CAP_EXTRACT_CDDA</a>;<a class="l" name="237">    237 </a><a class="l" name="238">    238 </a>	<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a> = <span class="n">0</span>;<a class="l" name="239">    239 </a><a class="hl" name="240">    240 </a>	<span class="c">/*<a class="l" name="241">    241 </a>	 * Find the block size of the device so we can translate<a class="l" name="242">    242 </a>	 * the <a href="/source/s?path=reads/">reads</a>/<a href="/source/s?path=reads/writes">writes</a> to the device blocksize.<a class="l" name="243">    243 </a>	 */</span><a class="l" name="244">    244 </a><a class="l" name="245">    245 </a>	<b>if</b> (<a href="/source/s?defs=ioctl">ioctl</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=DKIOCGMEDIAINFO">DKIOCGMEDIAINFO</a>, &amp;<a href="/source/s?defs=mediainfo">mediainfo</a>) &lt; <span class="n">0</span>) {<a class="l" name="246">    246 </a>		<span class="c">/*<a class="l" name="247">    247 </a>		 * If DKIOCGMEDIAINFO fails we'll try to get<a class="l" name="248">    248 </a>		 * the blocksize from the device itself.<a class="l" name="249">    249 </a>		 */</span><a class="hl" name="250">    250 </a>		<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="251">    251 </a>			(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"DKIOCGMEDIAINFO failed\n"</span>);<a class="l" name="252">    252 </a>		<b>if</b> (<a href="/source/s?defs=read_capacity">read_capacity</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=cap">cap</a>))<a class="l" name="253">    253 </a>			<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a> = <a href="/source/s?defs=read_scsi32">read_scsi32</a>(<a href="/source/s?defs=cap">cap</a> + <span class="n">4</span>);<a class="l" name="254">    254 </a>	} <b>else</b> {<a class="l" name="255">    255 </a><a class="l" name="256">    256 </a>		<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a> = <a href="/source/s?defs=mediainfo">mediainfo</a>.<a href="/source/s?defs=dki_lbsize">dki_lbsize</a>;<a class="l" name="257">    257 </a>	}<a class="l" name="258">    258 </a><a class="l" name="259">    259 </a>	<b>if</b> (<a href="/source/s?defs=debug">debug</a>) {<a class="hl" name="260">    260 </a>		<a href="/source/s?defs=uint_t">uint_t</a> <a href="/source/s?defs=bsize">bsize</a>;<a class="l" name="261">    261 </a><a class="l" name="262">    262 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"blocksize = %d\n"</span>, <a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a>);<a class="l" name="263">    263 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"read_format_capacity = %d \n"</span>,<a class="l" name="264">    264 </a>		    <a href="/source/s?defs=read_format_capacity">read_format_capacity</a>(<a href="/source/s?defs=fd">fd</a>, &amp;<a href="/source/s?defs=bsize">bsize</a>));<a class="l" name="265">    265 </a>	}<a class="l" name="266">    266 </a><a class="l" name="267">    267 </a>	<span class="c">/*<a class="l" name="268">    268 </a>	 * Some devices will return invalid blocksizes. ie. Toshiba<a class="l" name="269">    269 </a>	 * drives will return 2352 when an audio CD is inserted.<a class="hl" name="270">    270 </a>	 * Older Sun drives will use 512 byte block sizes. All newer<a class="l" name="271">    271 </a>	 * drives should have 2k blocksizes.<a class="l" name="272">    272 </a>	 */</span><a class="l" name="273">    273 </a>	<b>if</b> (((<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a> != <span class="n">512</span>) &amp;&amp; (<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a> != <span class="n">2048</span>))) {<a class="l" name="274">    274 </a>			<b>if</b> (<a href="/source/s?defs=is_old_sun_drive">is_old_sun_drive</a>(<a href="/source/s?defs=dev">dev</a>)) {<a class="l" name="275">    275 </a>				<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a> = <span class="n">512</span>;<a class="l" name="276">    276 </a>			} <b>else</b> {<a class="l" name="277">    277 </a>				<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a> = <span class="n">2048</span>;<a class="l" name="278">    278 </a>			}<a class="l" name="279">    279 </a>		<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="hl" name="280">    280 </a>			(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">" switching to %d\n"</span>, <a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_blksize">d_blksize</a>);<a class="l" name="281">    281 </a>	}<a class="l" name="282">    282 </a><a class="l" name="283">    283 </a>	<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=cap">cap</a>);<a class="l" name="284">    284 </a>	<b>if</b> (<a href="/source/s?defs=user_supplied">user_supplied</a>) {<a class="l" name="285">    285 </a>		<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_name">d_name</a> = (<b>char</b> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=strlen">strlen</a>(<a href="/source/s?defs=user_supplied">user_supplied</a>) + <span class="n">1</span>);<a class="l" name="286">    286 </a>		(<b>void</b>) <a href="/source/s?defs=strcpy">strcpy</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_name">d_name</a>, <a href="/source/s?defs=user_supplied">user_supplied</a>);<a class="l" name="287">    287 </a>	}<a class="l" name="288">    288 </a>	<a href="/source/s?defs=TRACE">TRACE</a>(<a href="/source/s?defs=traceall_msg">traceall_msg</a>(<span class="s">"Got device %s\n"</span>, <a href="/source/s?defs=node">node</a>));<a class="l" name="289">    289 </a>	<b>return</b> (<a href="/source/s?defs=dev">dev</a>);<a class="hl" name="290">    290 </a>}<a class="l" name="291">    291 </a><a class="l" name="292">    292 </a><b>void</b><a class="l" name="293">    293 </a><a href="/source/s?defs=fini_device">fini_device</a>(<a href="/source/s?defs=cd_device">cd_device</a> *<a href="/source/s?defs=dev">dev</a>)<a class="l" name="294">    294 </a>{<a class="l" name="295">    295 </a>	<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>);

⌨️ 快捷键说明

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