📄 vt.c
字号:
<a name=L93 href="source/kernel/chr_drv/vt.c?v=0.97#L93">93</a> <b><i> * KDADDIO and KDDELIO may be able to add ports beyond what</i></b> <a name=L94 href="source/kernel/chr_drv/vt.c?v=0.97#L94">94</a> <b><i> * we reject here, but to be safe...</i></b> <a name=L95 href="source/kernel/chr_drv/vt.c?v=0.97#L95">95</a> <b><i> */</i></b> <a name=L96 href="source/kernel/chr_drv/vt.c?v=0.97#L96">96</a> if (arg < <a href="ident?v=0.97;i=GPFIRST">GPFIRST</a> || arg > <a href="ident?v=0.97;i=GPLAST">GPLAST</a>) <a name=L97 href="source/kernel/chr_drv/vt.c?v=0.97#L97">97</a> return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>; <a name=L98 href="source/kernel/chr_drv/vt.c?v=0.97#L98">98</a> return <a href="ident?v=0.97;i=sys_ioperm">sys_ioperm</a>(arg, 1, (cmd == <a href="ident?v=0.97;i=KDADDIO">KDADDIO</a>)) ? -<a href="ident?v=0.97;i=ENXIO">ENXIO</a> : 0; <a name=L99 href="source/kernel/chr_drv/vt.c?v=0.97#L99">99</a> <a name=L100 href="source/kernel/chr_drv/vt.c?v=0.97#L100">100</a> case <a href="ident?v=0.97;i=KDENABIO">KDENABIO</a>:<a name=L101 href="source/kernel/chr_drv/vt.c?v=0.97#L101">101</a> case <a href="ident?v=0.97;i=KDDISABIO">KDDISABIO</a>:<a name=L102 href="source/kernel/chr_drv/vt.c?v=0.97#L102">102</a> return <a href="ident?v=0.97;i=sys_ioperm">sys_ioperm</a>(<a href="ident?v=0.97;i=GPFIRST">GPFIRST</a>, <a href="ident?v=0.97;i=GPNUM">GPNUM</a>,<a name=L103 href="source/kernel/chr_drv/vt.c?v=0.97#L103">103</a> (cmd == <a href="ident?v=0.97;i=KDENABIO">KDENABIO</a>)) ? -<a href="ident?v=0.97;i=ENXIO">ENXIO</a> : 0;<a name=L104 href="source/kernel/chr_drv/vt.c?v=0.97#L104">104</a> <a name=L105 href="source/kernel/chr_drv/vt.c?v=0.97#L105">105</a> case <a href="ident?v=0.97;i=KDSETMODE">KDSETMODE</a>:<a name=L106 href="source/kernel/chr_drv/vt.c?v=0.97#L106">106</a> <b><i>/*</i></b><a name=L107 href="source/kernel/chr_drv/vt.c?v=0.97#L107">107</a> <b><i> * currently, setting the mode from KD_TEXT to KD_GRAPHICS</i></b><a name=L108 href="source/kernel/chr_drv/vt.c?v=0.97#L108">108</a> <b><i> * doesn't do a whole lot. i'm not sure if it should do any</i></b><a name=L109 href="source/kernel/chr_drv/vt.c?v=0.97#L109">109</a> <b><i> * restoration of modes or what...</i></b><a name=L110 href="source/kernel/chr_drv/vt.c?v=0.97#L110">110</a> <b><i> */</i></b><a name=L111 href="source/kernel/chr_drv/vt.c?v=0.97#L111">111</a> switch (arg) {<a name=L112 href="source/kernel/chr_drv/vt.c?v=0.97#L112">112</a> case <a href="ident?v=0.97;i=KD_GRAPHICS">KD_GRAPHICS</a>:<a name=L113 href="source/kernel/chr_drv/vt.c?v=0.97#L113">113</a> break;<a name=L114 href="source/kernel/chr_drv/vt.c?v=0.97#L114">114</a> case <a href="ident?v=0.97;i=KD_TEXT0">KD_TEXT0</a>:<a name=L115 href="source/kernel/chr_drv/vt.c?v=0.97#L115">115</a> case <a href="ident?v=0.97;i=KD_TEXT1">KD_TEXT1</a>:<a name=L116 href="source/kernel/chr_drv/vt.c?v=0.97#L116">116</a> arg = <a href="ident?v=0.97;i=KD_TEXT">KD_TEXT</a>;<a name=L117 href="source/kernel/chr_drv/vt.c?v=0.97#L117">117</a> case <a href="ident?v=0.97;i=KD_TEXT">KD_TEXT</a>:<a name=L118 href="source/kernel/chr_drv/vt.c?v=0.97#L118">118</a> break;<a name=L119 href="source/kernel/chr_drv/vt.c?v=0.97#L119">119</a> default:<a name=L120 href="source/kernel/chr_drv/vt.c?v=0.97#L120">120</a> return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L121 href="source/kernel/chr_drv/vt.c?v=0.97#L121">121</a> }<a name=L122 href="source/kernel/chr_drv/vt.c?v=0.97#L122">122</a> if (<a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].<a href="ident?v=0.97;i=vt_mode">vt_mode</a> == (unsigned char) arg)<a name=L123 href="source/kernel/chr_drv/vt.c?v=0.97#L123">123</a> return 0;<a name=L124 href="source/kernel/chr_drv/vt.c?v=0.97#L124">124</a> <a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].<a href="ident?v=0.97;i=vt_mode">vt_mode</a> = (unsigned char) arg;<a name=L125 href="source/kernel/chr_drv/vt.c?v=0.97#L125">125</a> if (console != <a href="ident?v=0.97;i=fg_console">fg_console</a>)<a name=L126 href="source/kernel/chr_drv/vt.c?v=0.97#L126">126</a> return 0;<a name=L127 href="source/kernel/chr_drv/vt.c?v=0.97#L127">127</a> if (arg == <a href="ident?v=0.97;i=KD_TEXT">KD_TEXT</a>)<a name=L128 href="source/kernel/chr_drv/vt.c?v=0.97#L128">128</a> <a href="ident?v=0.97;i=unblank_screen">unblank_screen</a>();<a name=L129 href="source/kernel/chr_drv/vt.c?v=0.97#L129">129</a> else {<a name=L130 href="source/kernel/chr_drv/vt.c?v=0.97#L130">130</a> <a href="ident?v=0.97;i=timer_active">timer_active</a> &= 1<<<a href="ident?v=0.97;i=BLANK_TIMER">BLANK_TIMER</a>;<a name=L131 href="source/kernel/chr_drv/vt.c?v=0.97#L131">131</a> <a href="ident?v=0.97;i=blank_screen">blank_screen</a>();<a name=L132 href="source/kernel/chr_drv/vt.c?v=0.97#L132">132</a> }<a name=L133 href="source/kernel/chr_drv/vt.c?v=0.97#L133">133</a> return 0;<a name=L134 href="source/kernel/chr_drv/vt.c?v=0.97#L134">134</a> case <a href="ident?v=0.97;i=KDGETMODE">KDGETMODE</a>:<a name=L135 href="source/kernel/chr_drv/vt.c?v=0.97#L135">135</a> <a href="ident?v=0.97;i=verify_area">verify_area</a>((void *) arg, sizeof(unsigned long));<a name=L136 href="source/kernel/chr_drv/vt.c?v=0.97#L136">136</a> <a href="ident?v=0.97;i=put_fs_long">put_fs_long</a>(<a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].<a href="ident?v=0.97;i=vt_mode">vt_mode</a>, (unsigned long *) arg);<a name=L137 href="source/kernel/chr_drv/vt.c?v=0.97#L137">137</a> return 0;<a name=L138 href="source/kernel/chr_drv/vt.c?v=0.97#L138">138</a> <a name=L139 href="source/kernel/chr_drv/vt.c?v=0.97#L139">139</a> case <a href="ident?v=0.97;i=KDMAPDISP">KDMAPDISP</a>:<a name=L140 href="source/kernel/chr_drv/vt.c?v=0.97#L140">140</a> case <a href="ident?v=0.97;i=KDUNMAPDISP">KDUNMAPDISP</a>:<a name=L141 href="source/kernel/chr_drv/vt.c?v=0.97#L141">141</a> <b><i>/*</i></b><a name=L142 href="source/kernel/chr_drv/vt.c?v=0.97#L142">142</a> <b><i> * these work like a combination of mmap and KDENABIO.</i></b><a name=L143 href="source/kernel/chr_drv/vt.c?v=0.97#L143">143</a> <b><i> * this could be easily finished.</i></b><a name=L144 href="source/kernel/chr_drv/vt.c?v=0.97#L144">144</a> <b><i> */</i></b><a name=L145 href="source/kernel/chr_drv/vt.c?v=0.97#L145">145</a> return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L146 href="source/kernel/chr_drv/vt.c?v=0.97#L146">146</a> <a name=L147 href="source/kernel/chr_drv/vt.c?v=0.97#L147">147</a> case <a href="ident?v=0.97;i=KDSKBMODE">KDSKBMODE</a>:<a name=L148 href="source/kernel/chr_drv/vt.c?v=0.97#L148">148</a> if (arg == <a href="ident?v=0.97;i=K_RAW">K_RAW</a>) {<a name=L149 href="source/kernel/chr_drv/vt.c?v=0.97#L149">149</a> if (console == <a href="ident?v=0.97;i=fg_console">fg_console</a>) {<a name=L150 href="source/kernel/chr_drv/vt.c?v=0.97#L150">150</a> <a href="ident?v=0.97;i=kraw">kraw</a> = 1;<a name=L151 href="source/kernel/chr_drv/vt.c?v=0.97#L151">151</a> <a href="ident?v=0.97;i=ke0">ke0</a> = 0;<a name=L152 href="source/kernel/chr_drv/vt.c?v=0.97#L152">152</a> } else {<a name=L153 href="source/kernel/chr_drv/vt.c?v=0.97#L153">153</a> <a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].vc_kbdraw = 1;<a name=L154 href="source/kernel/chr_drv/vt.c?v=0.97#L154">154</a> <a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].vc_kbde0 = 0;<a name=L155 href="source/kernel/chr_drv/vt.c?v=0.97#L155">155</a> }<a name=L156 href="source/kernel/chr_drv/vt.c?v=0.97#L156">156</a> }<a name=L157 href="source/kernel/chr_drv/vt.c?v=0.97#L157">157</a> else if (arg == <a href="ident?v=0.97;i=K_XLATE">K_XLATE</a>) {<a name=L158 href="source/kernel/chr_drv/vt.c?v=0.97#L158">158</a> if (console == <a href="ident?v=0.97;i=fg_console">fg_console</a>)<a name=L159 href="source/kernel/chr_drv/vt.c?v=0.97#L159">159</a> <a href="ident?v=0.97;i=kraw">kraw</a> = 0;<a name=L160 href="source/kernel/chr_drv/vt.c?v=0.97#L160">160</a> else<a name=L161 href="source/kernel/chr_drv/vt.c?v=0.97#L161">161</a> <a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].vc_kbdraw = 0;<a name=L162 href="source/kernel/chr_drv/vt.c?v=0.97#L162">162</a> }<a name=L163 href="source/kernel/chr_drv/vt.c?v=0.97#L163">163</a> else<a name=L164 href="source/kernel/chr_drv/vt.c?v=0.97#L164">164</a> return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L165 href="source/kernel/chr_drv/vt.c?v=0.97#L165">165</a> <a href="ident?v=0.97;i=flush_input">flush_input</a>(tty);<a name=L166 href="source/kernel/chr_drv/vt.c?v=0.97#L166">166</a> return 0;<a name=L167 href="source/kernel/chr_drv/vt.c?v=0.97#L167">167</a> case <a href="ident?v=0.97;i=KDGKBMODE">KDGKBMODE</a>:<a name=L168 href="source/kernel/chr_drv/vt.c?v=0.97#L168">168</a> <a href="ident?v=0.97;i=verify_area">verify_area</a>((void *) arg, sizeof(unsigned long));<a name=L169 href="source/kernel/chr_drv/vt.c?v=0.97#L169">169</a> ucval = (console == <a href="ident?v=0.97;i=fg_console">fg_console</a>) ? <a href="ident?v=0.97;i=kraw">kraw</a> :<a name=L170 href="source/kernel/chr_drv/vt.c?v=0.97#L170">170</a> <a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].vc_kbdraw;<a name=L171 href="source/kernel/chr_drv/vt.c?v=0.97#L171">171</a> <a href="ident?v=0.97;i=put_fs_long">put_fs_long</a>(ucval ? <a href="ident?v=0.97;i=K_RAW">K_RAW</a> : <a href="ident?v=0.97;i=K_XLATE">K_XLATE</a>, (unsigned long *) arg);<a name=L172 href="source/kernel/chr_drv/vt.c?v=0.97#L172">172</a> return 0;<a name=L173 href="source/kernel/chr_drv/vt.c?v=0.97#L173">173</a> <a name=L174 href="source/kernel/chr_drv/vt.c?v=0.97#L174">174</a> case <a href="ident?v=0.97;i=KDGETLED">KDGETLED</a>:<a name=L175 href="source/kernel/chr_drv/vt.c?v=0.97#L175">175</a> <a href="ident?v=0.97;i=verify_area">verify_area</a>((void *) arg, sizeof(unsigned char));<a name=L176 href="source/kernel/chr_drv/vt.c?v=0.97#L176">176</a> ucval = (console == <a href="ident?v=0.97;i=fg_console">fg_console</a>) ? <a href="ident?v=0.97;i=kleds">kleds</a> :<a name=L177 href="source/kernel/chr_drv/vt.c?v=0.97#L177">177</a> <a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].vc_kbdleds;<a name=L178 href="source/kernel/chr_drv/vt.c?v=0.97#L178">178</a> <a href="ident?v=0.97;i=put_fs_byte">put_fs_byte</a>((((ucval & 1) ? <a href="ident?v=0.97;i=LED_SCR">LED_SCR</a> : 0) |<a name=L179 href="source/kernel/chr_drv/vt.c?v=0.97#L179">179</a> ((ucval & 2) ? <a href="ident?v=0.97;i=LED_NUM">LED_NUM</a> : 0) |<a name=L180 href="source/kernel/chr_drv/vt.c?v=0.97#L180">180</a> ((ucval & 4) ? <a href="ident?v=0.97;i=LED_CAP">LED_CAP</a> : 0)),<a name=L181 href="source/kernel/chr_drv/vt.c?v=0.97#L181">181</a> (unsigned char *) arg);<a name=L182 href="source/kernel/chr_drv/vt.c?v=0.97#L182">182</a> return 0;<a name=L183 href="source/kernel/chr_drv/vt.c?v=0.97#L183">183</a> case <a href="ident?v=0.97;i=KDSETLED">KDSETLED</a>:<a name=L184 href="source/kernel/chr_drv/vt.c?v=0.97#L184">184</a> if (arg & ~7)<a name=L185 href="source/kernel/chr_drv/vt.c?v=0.97#L185">185</a> return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L186 href="source/kernel/chr_drv/vt.c?v=0.97#L186">186</a> ucval = (((arg & <a href="ident?v=0.97;i=LED_SCR">LED_SCR</a>) ? 1 : 0) |<a name=L187 href="source/kernel/chr_drv/vt.c?v=0.97#L187">187</a> ((arg & <a href="ident?v=0.97;i=LED_NUM">LED_NUM</a>) ? 2 : 0) |<a name=L188 href="source/kernel/chr_drv/vt.c?v=0.97#L188">188</a> ((arg & <a href="ident?v=0.97;i=LED_CAP">LED_CAP</a>) ? 4 : 0));<a name=L189 href="source/kernel/chr_drv/vt.c?v=0.97#L189">189</a> if (console == <a href="ident?v=0.97;i=fg_console">fg_console</a>) {<a name=L190 href="source/kernel/chr_drv/vt.c?v=0.97#L190">190</a> <a href="ident?v=0.97;i=kleds">kleds</a> = ucval;<a name=L191 href="source/kernel/chr_drv/vt.c?v=0.97#L191">191</a> <a href="ident?v=0.97;i=set_leds">set_leds</a>();<a name=L192 href="source/kernel/chr_drv/vt.c?v=0.97#L192">192</a> }<a name=L193 href="source/kernel/chr_drv/vt.c?v=0.97#L193">193</a> else<a name=L194 href="source/kernel/chr_drv/vt.c?v=0.97#L194">194</a> <a href="ident?v=0.97;i=vt_cons">vt_cons</a>[console].vc_kbdleds = ucval;<a name=L195 href="source/kernel/chr_drv/vt.c?v=0.97#L195">195</a> return 0;<a name=L196 href="source/kernel/chr_drv/vt.c?v=0.97#L196">196</a> <a name=L197 href="source/kernel/chr_drv/vt.c?v=0.97#L197">197</a> default:<a name=L198 href="source/kernel/chr_drv/vt.c?v=0.97#L198">198</a> return -<a href="ident?v=0.97;i=EINVAL">EINVAL</a>;<a name=L199 href="source/kernel/chr_drv/vt.c?v=0.97#L199">199</a> }<a name=L200 href="source/kernel/chr_drv/vt.c?v=0.97#L200">200</a> }<a name=L201 href="source/kernel/chr_drv/vt.c?v=0.97#L201">201</a> </pre><hr><div align=center> [<b><i>source navigation</i></b>] [<a href="diff/kernel/chr_drv/vt.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 + -