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

📄 lp.c

📁 linux字符驱动源码
💻 C
📖 第 1 页 / 共 2 页
字号:
 <a name=L67 href="source/kernel/chr_drv/lp.c?v=0.97#L67">67</a>                         <a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) &amp;= ~LP_SELEC; <a name=L68 href="source/kernel/chr_drv/lp.c?v=0.97#L68">68</a>                         return temp-<a href="ident?v=0.97;i=buf">buf</a>?temp-<a href="ident?v=0.97;i=buf">buf</a>:-<a href="ident?v=0.97;i=EFAULT">EFAULT</a>; <a name=L69 href="source/kernel/chr_drv/lp.c?v=0.97#L69">69</a>                 } else <a name=L70 href="source/kernel/chr_drv/lp.c?v=0.97#L70">70</a>                         <a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) &amp;= ~LP_SELEC; <a name=L71 href="source/kernel/chr_drv/lp.c?v=0.97#L71">71</a>  <a name=L72 href="source/kernel/chr_drv/lp.c?v=0.97#L72">72</a>     <b><i>/* not offline or out of paper. on fire? */</i></b> <a name=L73 href="source/kernel/chr_drv/lp.c?v=0.97#L73">73</a>                 if (!(retval &amp; <a href="ident?v=0.97;i=LP_PERRORP">LP_PERRORP</a>)) { <a name=L74 href="source/kernel/chr_drv/lp.c?v=0.97#L74">74</a>                         <a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) |= <a href="ident?v=0.97;i=LP_ERR">LP_ERR</a>; <a name=L75 href="source/kernel/chr_drv/lp.c?v=0.97#L75">75</a>                         return temp-<a href="ident?v=0.97;i=buf">buf</a>?temp-<a href="ident?v=0.97;i=buf">buf</a>:-<a href="ident?v=0.97;i=EIO">EIO</a>; <a name=L76 href="source/kernel/chr_drv/lp.c?v=0.97#L76">76</a>                 } else <a name=L77 href="source/kernel/chr_drv/lp.c?v=0.97#L77">77</a>                         <a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) &amp;= ~LP_SELEC; <a name=L78 href="source/kernel/chr_drv/lp.c?v=0.97#L78">78</a>         } <a name=L79 href="source/kernel/chr_drv/lp.c?v=0.97#L79">79</a>         return temp-<a href="ident?v=0.97;i=buf">buf</a>; <a name=L80 href="source/kernel/chr_drv/lp.c?v=0.97#L80">80</a> } <a name=L81 href="source/kernel/chr_drv/lp.c?v=0.97#L81">81</a>  <a name=L82 href="source/kernel/chr_drv/lp.c?v=0.97#L82">82</a> static int <a href="ident?v=0.97;i=lp_read">lp_read</a>(struct <a href="ident?v=0.97;i=inode">inode</a> * <a href="ident?v=0.97;i=inode">inode</a>, struct <a href="ident?v=0.97;i=file">file</a> * <a href="ident?v=0.97;i=file">file</a>, char * <a href="ident?v=0.97;i=buf">buf</a>, int <a href="ident?v=0.97;i=count">count</a>) <a name=L83 href="source/kernel/chr_drv/lp.c?v=0.97#L83">83</a> { <a name=L84 href="source/kernel/chr_drv/lp.c?v=0.97#L84">84</a>         return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>; <a name=L85 href="source/kernel/chr_drv/lp.c?v=0.97#L85">85</a> } <a name=L86 href="source/kernel/chr_drv/lp.c?v=0.97#L86">86</a>  <a name=L87 href="source/kernel/chr_drv/lp.c?v=0.97#L87">87</a> static int <a href="ident?v=0.97;i=lp_lseek">lp_lseek</a>(struct <a href="ident?v=0.97;i=inode">inode</a> * <a href="ident?v=0.97;i=inode">inode</a>, struct <a href="ident?v=0.97;i=file">file</a> * <a href="ident?v=0.97;i=file">file</a>, <a href="ident?v=0.97;i=off_t">off_t</a> offset, int <a href="ident?v=0.97;i=origin">origin</a>) <a name=L88 href="source/kernel/chr_drv/lp.c?v=0.97#L88">88</a> { <a name=L89 href="source/kernel/chr_drv/lp.c?v=0.97#L89">89</a>         return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>; <a name=L90 href="source/kernel/chr_drv/lp.c?v=0.97#L90">90</a> } <a name=L91 href="source/kernel/chr_drv/lp.c?v=0.97#L91">91</a>  <a name=L92 href="source/kernel/chr_drv/lp.c?v=0.97#L92">92</a> static int <a href="ident?v=0.97;i=lp_open">lp_open</a>(struct <a href="ident?v=0.97;i=inode">inode</a> * <a href="ident?v=0.97;i=inode">inode</a>, struct <a href="ident?v=0.97;i=file">file</a> * <a href="ident?v=0.97;i=file">file</a>) <a name=L93 href="source/kernel/chr_drv/lp.c?v=0.97#L93">93</a> { <a name=L94 href="source/kernel/chr_drv/lp.c?v=0.97#L94">94</a>         unsigned int minor = <a href="ident?v=0.97;i=MINOR">MINOR</a>(<a href="ident?v=0.97;i=inode">inode</a>-&gt;i_rdev); <a name=L95 href="source/kernel/chr_drv/lp.c?v=0.97#L95">95</a>  <a name=L96 href="source/kernel/chr_drv/lp.c?v=0.97#L96">96</a>         if (minor &gt;= <a href="ident?v=0.97;i=LP_NO">LP_NO</a>) <a name=L97 href="source/kernel/chr_drv/lp.c?v=0.97#L97">97</a>                 return -<a href="ident?v=0.97;i=ENODEV">ENODEV</a>; <a name=L98 href="source/kernel/chr_drv/lp.c?v=0.97#L98">98</a>         if ((<a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) &amp; <a href="ident?v=0.97;i=LP_EXIST">LP_EXIST</a>) == 0) <a name=L99 href="source/kernel/chr_drv/lp.c?v=0.97#L99">99</a>                 return -<a href="ident?v=0.97;i=ENODEV">ENODEV</a>;<a name=L100 href="source/kernel/chr_drv/lp.c?v=0.97#L100">100</a>         if (<a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) &amp; <a href="ident?v=0.97;i=LP_BUSY">LP_BUSY</a>)<a name=L101 href="source/kernel/chr_drv/lp.c?v=0.97#L101">101</a>                 return -<a href="ident?v=0.97;i=EBUSY">EBUSY</a>;<a name=L102 href="source/kernel/chr_drv/lp.c?v=0.97#L102">102</a>         <a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) |= <a href="ident?v=0.97;i=LP_BUSY">LP_BUSY</a>;<a name=L103 href="source/kernel/chr_drv/lp.c?v=0.97#L103">103</a>         return 0;<a name=L104 href="source/kernel/chr_drv/lp.c?v=0.97#L104">104</a> }<a name=L105 href="source/kernel/chr_drv/lp.c?v=0.97#L105">105</a> <a name=L106 href="source/kernel/chr_drv/lp.c?v=0.97#L106">106</a> static void <a href="ident?v=0.97;i=lp_release">lp_release</a>(struct <a href="ident?v=0.97;i=inode">inode</a> * <a href="ident?v=0.97;i=inode">inode</a>, struct <a href="ident?v=0.97;i=file">file</a> * <a href="ident?v=0.97;i=file">file</a>)<a name=L107 href="source/kernel/chr_drv/lp.c?v=0.97#L107">107</a> {<a name=L108 href="source/kernel/chr_drv/lp.c?v=0.97#L108">108</a>         unsigned int minor = <a href="ident?v=0.97;i=MINOR">MINOR</a>(<a href="ident?v=0.97;i=inode">inode</a>-&gt;i_rdev);<a name=L109 href="source/kernel/chr_drv/lp.c?v=0.97#L109">109</a> <a name=L110 href="source/kernel/chr_drv/lp.c?v=0.97#L110">110</a>         <a href="ident?v=0.97;i=LP_F">LP_F</a>(minor) &amp;= ~LP_BUSY;<a name=L111 href="source/kernel/chr_drv/lp.c?v=0.97#L111">111</a> }<a name=L112 href="source/kernel/chr_drv/lp.c?v=0.97#L112">112</a> <a name=L113 href="source/kernel/chr_drv/lp.c?v=0.97#L113">113</a> static struct <a href="ident?v=0.97;i=file_operations">file_operations</a> <a href="ident?v=0.97;i=lp_fops">lp_fops</a> = {<a name=L114 href="source/kernel/chr_drv/lp.c?v=0.97#L114">114</a>         <a href="ident?v=0.97;i=lp_lseek">lp_lseek</a>,<a name=L115 href="source/kernel/chr_drv/lp.c?v=0.97#L115">115</a>         <a href="ident?v=0.97;i=lp_read">lp_read</a>,<a name=L116 href="source/kernel/chr_drv/lp.c?v=0.97#L116">116</a>         <a href="ident?v=0.97;i=lp_write">lp_write</a>,<a name=L117 href="source/kernel/chr_drv/lp.c?v=0.97#L117">117</a>         <a href="ident?v=0.97;i=NULL">NULL</a>,           <b><i>/* lp_readdir */</i></b><a name=L118 href="source/kernel/chr_drv/lp.c?v=0.97#L118">118</a>         <a href="ident?v=0.97;i=NULL">NULL</a>,           <b><i>/* lp_select */</i></b><a name=L119 href="source/kernel/chr_drv/lp.c?v=0.97#L119">119</a>         <a href="ident?v=0.97;i=NULL">NULL</a>,           <b><i>/* lp_ioctl */</i></b><a name=L120 href="source/kernel/chr_drv/lp.c?v=0.97#L120">120</a>         <a href="ident?v=0.97;i=lp_open">lp_open</a>,<a name=L121 href="source/kernel/chr_drv/lp.c?v=0.97#L121">121</a>         <a href="ident?v=0.97;i=lp_release">lp_release</a><a name=L122 href="source/kernel/chr_drv/lp.c?v=0.97#L122">122</a> };<a name=L123 href="source/kernel/chr_drv/lp.c?v=0.97#L123">123</a> <a name=L124 href="source/kernel/chr_drv/lp.c?v=0.97#L124">124</a> long <a href="ident?v=0.97;i=lp_init">lp_init</a>(long kmem_start)<a name=L125 href="source/kernel/chr_drv/lp.c?v=0.97#L125">125</a> {<a name=L126 href="source/kernel/chr_drv/lp.c?v=0.97#L126">126</a>         int offset = 0;<a name=L127 href="source/kernel/chr_drv/lp.c?v=0.97#L127">127</a>         unsigned int testvalue = 0;<a name=L128 href="source/kernel/chr_drv/lp.c?v=0.97#L128">128</a>         int <a href="ident?v=0.97;i=count">count</a> = 0;<a name=L129 href="source/kernel/chr_drv/lp.c?v=0.97#L129">129</a> <a name=L130 href="source/kernel/chr_drv/lp.c?v=0.97#L130">130</a>         <a href="ident?v=0.97;i=chrdev_fops">chrdev_fops</a>[6] = &amp;<a href="ident?v=0.97;i=lp_fops">lp_fops</a>;<a name=L131 href="source/kernel/chr_drv/lp.c?v=0.97#L131">131</a>         <b><i>/* take on all known port values */</i></b><a name=L132 href="source/kernel/chr_drv/lp.c?v=0.97#L132">132</a>         for (offset = 0; offset &lt; <a href="ident?v=0.97;i=LP_NO">LP_NO</a>; offset++) {<a name=L133 href="source/kernel/chr_drv/lp.c?v=0.97#L133">133</a>                 <b><i>/* write to port &amp; read back to check */</i></b><a name=L134 href="source/kernel/chr_drv/lp.c?v=0.97#L134">134</a>                 <a href="ident?v=0.97;i=outb">outb</a>( <a href="ident?v=0.97;i=LP_DUMMY">LP_DUMMY</a>, <a href="ident?v=0.97;i=LP_B">LP_B</a>(offset));<a name=L135 href="source/kernel/chr_drv/lp.c?v=0.97#L135">135</a>                 for (testvalue = 0 ; testvalue &lt; <a href="ident?v=0.97;i=LP_DELAY">LP_DELAY</a> ; testvalue++)<a name=L136 href="source/kernel/chr_drv/lp.c?v=0.97#L136">136</a>                         ;<a name=L137 href="source/kernel/chr_drv/lp.c?v=0.97#L137">137</a>                 testvalue = <a href="ident?v=0.97;i=inb">inb</a>(<a href="ident?v=0.97;i=LP_B">LP_B</a>(offset));<a name=L138 href="source/kernel/chr_drv/lp.c?v=0.97#L138">138</a>                 if (testvalue != 255) {<a name=L139 href="source/kernel/chr_drv/lp.c?v=0.97#L139">139</a>                         <a href="ident?v=0.97;i=LP_F">LP_F</a>(offset) |= <a href="ident?v=0.97;i=LP_EXIST">LP_EXIST</a>;<a name=L140 href="source/kernel/chr_drv/lp.c?v=0.97#L140">140</a>                         <a href="ident?v=0.97;i=lp_reset">lp_reset</a>(offset);<a name=L141 href="source/kernel/chr_drv/lp.c?v=0.97#L141">141</a>                         <a href="ident?v=0.97;i=printk">printk</a>(<i>"lp_init: lp%d exists (%d)\n"</i>, offset, testvalue);<a name=L142 href="source/kernel/chr_drv/lp.c?v=0.97#L142">142</a>                         <a href="ident?v=0.97;i=count">count</a>++;<a name=L143 href="source/kernel/chr_drv/lp.c?v=0.97#L143">143</a>                 }<a name=L144 href="source/kernel/chr_drv/lp.c?v=0.97#L144">144</a>         }<a name=L145 href="source/kernel/chr_drv/lp.c?v=0.97#L145">145</a>         if (<a href="ident?v=0.97;i=count">count</a> == 0)<a name=L146 href="source/kernel/chr_drv/lp.c?v=0.97#L146">146</a>                 <a href="ident?v=0.97;i=printk">printk</a>(<i>"lp_init: no lp devices found\n"</i>);<a name=L147 href="source/kernel/chr_drv/lp.c?v=0.97#L147">147</a>         return kmem_start;<a name=L148 href="source/kernel/chr_drv/lp.c?v=0.97#L148">148</a> }<a name=L149 href="source/kernel/chr_drv/lp.c?v=0.97#L149">149</a> </pre><hr><div align=center>   [<b><i>source navigation</i></b>] [<a href="diff/kernel/chr_drv/lp.c?v=0.97">diff markup</a>] [<a href="ident?v=0.97">identifier search</a>] [<a href="search?v=0.97">freetext search</a>] [<a href="find?v=0.97">file search</a>] </div><hr>This page was automatically generated by the <a href="http:blurb.html">LXR engine</a>.<br>Visit the <a href="http://lxr.linux.no/">LXR main site</a> for moreinformation.</html>

⌨️ 快捷键说明

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