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

📄 mouse.c

📁 linux字符驱动源码
💻 C
📖 第 1 页 / 共 2 页
字号:
 <a name=L84 href="source/kernel/chr_drv/mouse.c?v=0.97#L84">84</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.dy = 0;    <a name=L85 href="source/kernel/chr_drv/mouse.c?v=0.97#L85">85</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.buttons = <a href="ident?v=0.97;i=mouse">mouse</a>.latch_buttons = 0x80; <a name=L86 href="source/kernel/chr_drv/mouse.c?v=0.97#L86">86</a>         <a href="ident?v=0.97;i=MSE_INT_ON">MSE_INT_ON</a>();    <a name=L87 href="source/kernel/chr_drv/mouse.c?v=0.97#L87">87</a>         if (<a href="ident?v=0.97;i=request_irq">request_irq</a>(<a href="ident?v=0.97;i=MOUSE_IRQ">MOUSE_IRQ</a>, <a href="ident?v=0.97;i=mouse_interrupt">mouse_interrupt</a>)) { <a name=L88 href="source/kernel/chr_drv/mouse.c?v=0.97#L88">88</a>                 <a href="ident?v=0.97;i=MSE_INT_OFF">MSE_INT_OFF</a>(); <a name=L89 href="source/kernel/chr_drv/mouse.c?v=0.97#L89">89</a>                 <a href="ident?v=0.97;i=mouse">mouse</a>.active = 0; <a name=L90 href="source/kernel/chr_drv/mouse.c?v=0.97#L90">90</a>                 <a href="ident?v=0.97;i=mouse">mouse</a>.ready = 0; <a name=L91 href="source/kernel/chr_drv/mouse.c?v=0.97#L91">91</a>                 <a href="ident?v=0.97;i=mouse">mouse</a>.<a href="ident?v=0.97;i=inode">inode</a> = <a href="ident?v=0.97;i=NULL">NULL</a>; <a name=L92 href="source/kernel/chr_drv/mouse.c?v=0.97#L92">92</a>                 return -<a href="ident?v=0.97;i=EBUSY">EBUSY</a>; <a name=L93 href="source/kernel/chr_drv/mouse.c?v=0.97#L93">93</a>         } <a name=L94 href="source/kernel/chr_drv/mouse.c?v=0.97#L94">94</a>         return 0; <a name=L95 href="source/kernel/chr_drv/mouse.c?v=0.97#L95">95</a> } <a name=L96 href="source/kernel/chr_drv/mouse.c?v=0.97#L96">96</a>  <a name=L97 href="source/kernel/chr_drv/mouse.c?v=0.97#L97">97</a> static int <a href="ident?v=0.97;i=write_mouse">write_mouse</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 * buffer, int <a href="ident?v=0.97;i=count">count</a>) <a name=L98 href="source/kernel/chr_drv/mouse.c?v=0.97#L98">98</a> { <a name=L99 href="source/kernel/chr_drv/mouse.c?v=0.97#L99">99</a>         return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L100 href="source/kernel/chr_drv/mouse.c?v=0.97#L100">100</a> }<a name=L101 href="source/kernel/chr_drv/mouse.c?v=0.97#L101">101</a> <a name=L102 href="source/kernel/chr_drv/mouse.c?v=0.97#L102">102</a> static int <a href="ident?v=0.97;i=read_mouse">read_mouse</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 * buffer, int <a href="ident?v=0.97;i=count">count</a>)<a name=L103 href="source/kernel/chr_drv/mouse.c?v=0.97#L103">103</a> {<a name=L104 href="source/kernel/chr_drv/mouse.c?v=0.97#L104">104</a>         int i;<a name=L105 href="source/kernel/chr_drv/mouse.c?v=0.97#L105">105</a> <a name=L106 href="source/kernel/chr_drv/mouse.c?v=0.97#L106">106</a>         if (<a href="ident?v=0.97;i=count">count</a> &lt; 3) return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L107 href="source/kernel/chr_drv/mouse.c?v=0.97#L107">107</a>         if (!<a href="ident?v=0.97;i=mouse">mouse</a>.ready) return -<a href="ident?v=0.97;i=EAGAIN">EAGAIN</a>;<a name=L108 href="source/kernel/chr_drv/mouse.c?v=0.97#L108">108</a>         <a name=L109 href="source/kernel/chr_drv/mouse.c?v=0.97#L109">109</a>         <a href="ident?v=0.97;i=MSE_INT_OFF">MSE_INT_OFF</a>();<a name=L110 href="source/kernel/chr_drv/mouse.c?v=0.97#L110">110</a>                 <a name=L111 href="source/kernel/chr_drv/mouse.c?v=0.97#L111">111</a>         <a href="ident?v=0.97;i=put_fs_byte">put_fs_byte</a>(<a href="ident?v=0.97;i=mouse">mouse</a>.latch_buttons | 0x80, buffer);<a name=L112 href="source/kernel/chr_drv/mouse.c?v=0.97#L112">112</a>         <a name=L113 href="source/kernel/chr_drv/mouse.c?v=0.97#L113">113</a>         if (<a href="ident?v=0.97;i=mouse">mouse</a>.dx &lt; -127) <a href="ident?v=0.97;i=mouse">mouse</a>.dx = -127;<a name=L114 href="source/kernel/chr_drv/mouse.c?v=0.97#L114">114</a>         if (<a href="ident?v=0.97;i=mouse">mouse</a>.dx &gt;  127) <a href="ident?v=0.97;i=mouse">mouse</a>.dx =  127;<a name=L115 href="source/kernel/chr_drv/mouse.c?v=0.97#L115">115</a>         <a name=L116 href="source/kernel/chr_drv/mouse.c?v=0.97#L116">116</a>         <a href="ident?v=0.97;i=put_fs_byte">put_fs_byte</a>((char)<a href="ident?v=0.97;i=mouse">mouse</a>.dx, buffer + 1);<a name=L117 href="source/kernel/chr_drv/mouse.c?v=0.97#L117">117</a>         <a name=L118 href="source/kernel/chr_drv/mouse.c?v=0.97#L118">118</a>         if (<a href="ident?v=0.97;i=mouse">mouse</a>.dy &lt; -127) <a href="ident?v=0.97;i=mouse">mouse</a>.dy = -127;<a name=L119 href="source/kernel/chr_drv/mouse.c?v=0.97#L119">119</a>         if (<a href="ident?v=0.97;i=mouse">mouse</a>.dy &gt;  127) <a href="ident?v=0.97;i=mouse">mouse</a>.dy =  127;<a name=L120 href="source/kernel/chr_drv/mouse.c?v=0.97#L120">120</a>         <a name=L121 href="source/kernel/chr_drv/mouse.c?v=0.97#L121">121</a>         <a href="ident?v=0.97;i=put_fs_byte">put_fs_byte</a>((char) -<a href="ident?v=0.97;i=mouse">mouse</a>.dy, buffer + 2);<a name=L122 href="source/kernel/chr_drv/mouse.c?v=0.97#L122">122</a>         <a name=L123 href="source/kernel/chr_drv/mouse.c?v=0.97#L123">123</a>         for (i = 3; i &lt; <a href="ident?v=0.97;i=count">count</a>; i++)<a name=L124 href="source/kernel/chr_drv/mouse.c?v=0.97#L124">124</a>                 <a href="ident?v=0.97;i=put_fs_byte">put_fs_byte</a>(0x00, buffer + i);<a name=L125 href="source/kernel/chr_drv/mouse.c?v=0.97#L125">125</a>                 <a name=L126 href="source/kernel/chr_drv/mouse.c?v=0.97#L126">126</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.dx = 0;<a name=L127 href="source/kernel/chr_drv/mouse.c?v=0.97#L127">127</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.dy = 0;<a name=L128 href="source/kernel/chr_drv/mouse.c?v=0.97#L128">128</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.latch_buttons = <a href="ident?v=0.97;i=mouse">mouse</a>.buttons;<a name=L129 href="source/kernel/chr_drv/mouse.c?v=0.97#L129">129</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.ready = 0;<a name=L130 href="source/kernel/chr_drv/mouse.c?v=0.97#L130">130</a>         <a name=L131 href="source/kernel/chr_drv/mouse.c?v=0.97#L131">131</a>         <a href="ident?v=0.97;i=MSE_INT_ON">MSE_INT_ON</a>();<a name=L132 href="source/kernel/chr_drv/mouse.c?v=0.97#L132">132</a>         return i;       <a name=L133 href="source/kernel/chr_drv/mouse.c?v=0.97#L133">133</a> }<a name=L134 href="source/kernel/chr_drv/mouse.c?v=0.97#L134">134</a> <a name=L135 href="source/kernel/chr_drv/mouse.c?v=0.97#L135">135</a> static int <a href="ident?v=0.97;i=mouse_select">mouse_select</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>, int sel_type, <a href="ident?v=0.97;i=select_table">select_table</a> * <a href="ident?v=0.97;i=wait">wait</a>)<a name=L136 href="source/kernel/chr_drv/mouse.c?v=0.97#L136">136</a> {<a name=L137 href="source/kernel/chr_drv/mouse.c?v=0.97#L137">137</a>         if (sel_type != <a href="ident?v=0.97;i=SEL_IN">SEL_IN</a>)<a name=L138 href="source/kernel/chr_drv/mouse.c?v=0.97#L138">138</a>                 return 0;<a name=L139 href="source/kernel/chr_drv/mouse.c?v=0.97#L139">139</a>         if (<a href="ident?v=0.97;i=mouse">mouse</a>.ready) <a name=L140 href="source/kernel/chr_drv/mouse.c?v=0.97#L140">140</a>                 return 1;<a name=L141 href="source/kernel/chr_drv/mouse.c?v=0.97#L141">141</a>         <a href="ident?v=0.97;i=select_wait">select_wait</a>(&amp;<a href="ident?v=0.97;i=inode">inode</a>-&gt;i_wait,<a href="ident?v=0.97;i=wait">wait</a>);<a name=L142 href="source/kernel/chr_drv/mouse.c?v=0.97#L142">142</a>         return 0;<a name=L143 href="source/kernel/chr_drv/mouse.c?v=0.97#L143">143</a> }<a name=L144 href="source/kernel/chr_drv/mouse.c?v=0.97#L144">144</a> <a name=L145 href="source/kernel/chr_drv/mouse.c?v=0.97#L145">145</a> static struct <a href="ident?v=0.97;i=file_operations">file_operations</a> <a href="ident?v=0.97;i=mouse_fops">mouse_fops</a> = {<a name=L146 href="source/kernel/chr_drv/mouse.c?v=0.97#L146">146</a>         <a href="ident?v=0.97;i=NULL">NULL</a>,           <b><i>/* mouse_seek */</i></b><a name=L147 href="source/kernel/chr_drv/mouse.c?v=0.97#L147">147</a>         <a href="ident?v=0.97;i=read_mouse">read_mouse</a>,<a name=L148 href="source/kernel/chr_drv/mouse.c?v=0.97#L148">148</a>         <a href="ident?v=0.97;i=write_mouse">write_mouse</a>,<a name=L149 href="source/kernel/chr_drv/mouse.c?v=0.97#L149">149</a>         <a href="ident?v=0.97;i=NULL">NULL</a>,           <b><i>/* mouse_readdir */</i></b><a name=L150 href="source/kernel/chr_drv/mouse.c?v=0.97#L150">150</a>         <a href="ident?v=0.97;i=mouse_select">mouse_select</a>,   <b><i>/* mouse_select */</i></b><a name=L151 href="source/kernel/chr_drv/mouse.c?v=0.97#L151">151</a>         <a href="ident?v=0.97;i=NULL">NULL</a>,           <b><i>/* mouse_ioctl */</i></b><a name=L152 href="source/kernel/chr_drv/mouse.c?v=0.97#L152">152</a>         <a href="ident?v=0.97;i=open_mouse">open_mouse</a>,<a name=L153 href="source/kernel/chr_drv/mouse.c?v=0.97#L153">153</a>         <a href="ident?v=0.97;i=release_mouse">release_mouse</a>,<a name=L154 href="source/kernel/chr_drv/mouse.c?v=0.97#L154">154</a> };<a name=L155 href="source/kernel/chr_drv/mouse.c?v=0.97#L155">155</a> <a name=L156 href="source/kernel/chr_drv/mouse.c?v=0.97#L156">156</a> long <a href="ident?v=0.97;i=mouse_init">mouse_init</a>(long kmem_start)<a name=L157 href="source/kernel/chr_drv/mouse.c?v=0.97#L157">157</a> {       <a name=L158 href="source/kernel/chr_drv/mouse.c?v=0.97#L158">158</a>         int i;<a name=L159 href="source/kernel/chr_drv/mouse.c?v=0.97#L159">159</a> <a name=L160 href="source/kernel/chr_drv/mouse.c?v=0.97#L160">160</a>         <a href="ident?v=0.97;i=outb">outb</a>(<a href="ident?v=0.97;i=MSE_CONFIG_BYTE">MSE_CONFIG_BYTE</a>, <a href="ident?v=0.97;i=MSE_CONFIG_PORT">MSE_CONFIG_PORT</a>);<a name=L161 href="source/kernel/chr_drv/mouse.c?v=0.97#L161">161</a>         <a href="ident?v=0.97;i=outb">outb</a>(<a href="ident?v=0.97;i=MSE_SIGNATURE_BYTE">MSE_SIGNATURE_BYTE</a>, <a href="ident?v=0.97;i=MSE_SIGNATURE_PORT">MSE_SIGNATURE_PORT</a>);<a name=L162 href="source/kernel/chr_drv/mouse.c?v=0.97#L162">162</a>         <a name=L163 href="source/kernel/chr_drv/mouse.c?v=0.97#L163">163</a>         for (i = 0; i &lt; 100000; i++); <b><i>/* busy loop */</i></b><a name=L164 href="source/kernel/chr_drv/mouse.c?v=0.97#L164">164</a>         if (<a href="ident?v=0.97;i=inb">inb</a>(<a href="ident?v=0.97;i=MSE_SIGNATURE_PORT">MSE_SIGNATURE_PORT</a>) != <a href="ident?v=0.97;i=MSE_SIGNATURE_BYTE">MSE_SIGNATURE_BYTE</a>) {<a name=L165 href="source/kernel/chr_drv/mouse.c?v=0.97#L165">165</a>                 <a href="ident?v=0.97;i=printk">printk</a>(<i>"No bus mouse detected.\n"</i>);<a name=L166 href="source/kernel/chr_drv/mouse.c?v=0.97#L166">166</a>                 <a href="ident?v=0.97;i=mouse">mouse</a>.present = 0;<a name=L167 href="source/kernel/chr_drv/mouse.c?v=0.97#L167">167</a>                 return kmem_start;<a name=L168 href="source/kernel/chr_drv/mouse.c?v=0.97#L168">168</a>         }<a name=L169 href="source/kernel/chr_drv/mouse.c?v=0.97#L169">169</a>         <a href="ident?v=0.97;i=chrdev_fops">chrdev_fops</a>[10] = &amp;<a href="ident?v=0.97;i=mouse_fops">mouse_fops</a>;<a name=L170 href="source/kernel/chr_drv/mouse.c?v=0.97#L170">170</a>         <a href="ident?v=0.97;i=outb">outb</a>(<a href="ident?v=0.97;i=MSE_DEFAULT_MODE">MSE_DEFAULT_MODE</a>, <a href="ident?v=0.97;i=MSE_CONFIG_PORT">MSE_CONFIG_PORT</a>);<a name=L171 href="source/kernel/chr_drv/mouse.c?v=0.97#L171">171</a>         <a name=L172 href="source/kernel/chr_drv/mouse.c?v=0.97#L172">172</a>         <a href="ident?v=0.97;i=MSE_INT_OFF">MSE_INT_OFF</a>();<a name=L173 href="source/kernel/chr_drv/mouse.c?v=0.97#L173">173</a>         <a name=L174 href="source/kernel/chr_drv/mouse.c?v=0.97#L174">174</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.present = 1;<a name=L175 href="source/kernel/chr_drv/mouse.c?v=0.97#L175">175</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.active = 0;<a name=L176 href="source/kernel/chr_drv/mouse.c?v=0.97#L176">176</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.ready = 0;<a name=L177 href="source/kernel/chr_drv/mouse.c?v=0.97#L177">177</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.buttons = <a href="ident?v=0.97;i=mouse">mouse</a>.latch_buttons = 0x80;<a name=L178 href="source/kernel/chr_drv/mouse.c?v=0.97#L178">178</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.dx = 0;<a name=L179 href="source/kernel/chr_drv/mouse.c?v=0.97#L179">179</a>         <a href="ident?v=0.97;i=mouse">mouse</a>.dy = 0;<a name=L180 href="source/kernel/chr_drv/mouse.c?v=0.97#L180">180</a>         <a href="ident?v=0.97;i=printk">printk</a>(<i>"Bus mouse detected and installed.\n"</i>);<a name=L181 href="source/kernel/chr_drv/mouse.c?v=0.97#L181">181</a>         return kmem_start;<a name=L182 href="source/kernel/chr_drv/mouse.c?v=0.97#L182">182</a> }<a name=L183 href="source/kernel/chr_drv/mouse.c?v=0.97#L183">183</a> </pre><hr><div align=center>   [<b><i>source navigation</i></b>] [<a href="diff/kernel/chr_drv/mouse.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 + -