Function report |
Source Code:arch\x86\kernel\cpu\mtrr\if.c |
Create Date:2022-07-28 08:05:42 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:mtrr_ioctl
Proto:static long mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
Type:long
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct file * | file | |
| unsigned int | cmd | |
| unsigned long | __arg |
| 160 | err = 0 |
| 171 | Case cmd == These are the various ioctls |
| 172 | Case cmd == MTRRIOC_SET_ENTRY |
| 173 | Case cmd == MTRRIOC_DEL_ENTRY |
| 174 | Case cmd == MTRRIOC_KILL_ENTRY |
| 175 | Case cmd == MTRRIOC_ADD_PAGE_ENTRY |
| 176 | Case cmd == MTRRIOC_SET_PAGE_ENTRY |
| 177 | Case cmd == MTRRIOC_DEL_PAGE_ENTRY |
| 178 | Case cmd == MTRRIOC_KILL_PAGE_ENTRY |
| 179 | If copy_from_user( & sentry, arg, size of sentry ) Then Return -EFAULT |
| 181 | Break |
| 182 | Case cmd == MTRRIOC_GET_ENTRY |
| 183 | Case cmd == MTRRIOC_GET_PAGE_ENTRY |
| 184 | If copy_from_user( & gentry, arg, size of gentry ) Then Return -EFAULT |
| 186 | Break |
| 188 | Case cmd == MTRRIOC32_ADD_ENTRY |
| 189 | Case cmd == MTRRIOC32_SET_ENTRY |
| 190 | Case cmd == MTRRIOC32_DEL_ENTRY |
| 191 | Case cmd == MTRRIOC32_KILL_ENTRY |
| 192 | Case cmd == MTRRIOC32_ADD_PAGE_ENTRY |
| 193 | Case cmd == MTRRIOC32_SET_PAGE_ENTRY |
| 194 | Case cmd == MTRRIOC32_DEL_PAGE_ENTRY |
| 195 | Case cmd == MTRRIOC32_KILL_PAGE_ENTRY |
| 204 | Break |
| 206 | Case cmd == MTRRIOC32_GET_ENTRY |
| 207 | Case cmd == MTRRIOC32_GET_PAGE_ENTRY |
| 212 | err |= Get a simple variable from user space( Base address , & Base address ) |
| 213 | err |= Get a simple variable from user space( Size of region , & Size of region ) |
| 214 | err |= Get a simple variable from user space( Type of region , & Type of region ) |
| 217 | Break |
| 223 | Default |
| 224 | Return -ENOTTY |
| 225 | Case cmd == These are the various ioctls |
| 227 | Case cmd == MTRRIOC32_ADD_ENTRY |
| 229 | If Not Check operation authority Then Return -EPERM |
| 231 | err = mtrr_file_add(Base address , Size of region , Type of region , true, file, 0) |
| 234 | Break |
| 235 | Case cmd == MTRRIOC_SET_ENTRY |
| 237 | Case cmd == MTRRIOC32_SET_ENTRY |
| 239 | If Not Check operation authority Then Return -EPERM |
| 242 | Break |
| 243 | Case cmd == MTRRIOC_DEL_ENTRY |
| 245 | Case cmd == MTRRIOC32_DEL_ENTRY |
| 247 | If Not Check operation authority Then Return -EPERM |
| 249 | err = mtrr_file_del(Base address , Size of region , file, 0) |
| 250 | Break |
| 251 | Case cmd == MTRRIOC_KILL_ENTRY |
| 253 | Case cmd == MTRRIOC32_KILL_ENTRY |
| 255 | If Not Check operation authority Then Return -EPERM |
| 258 | Break |
| 259 | Case cmd == MTRRIOC_GET_ENTRY |
| 261 | Case cmd == MTRRIOC32_GET_ENTRY |
| 263 | If Register number >= num_var_ranges Then Return -EINVAL |
| 265 | get( Register number , & base, & size, & type) |
| 268 | If base + size - 1 >= 1UL << 8 * size of Size of region - PAGE_SHIFT determines the page size || size >= 1UL << 8 * size of Size of region - PAGE_SHIFT determines the page size Then Base address = Size of region = Type of region = 0 |
| 271 | Else |
| 274 | Type of region = type |
| 277 | Break |
| 278 | Case cmd == MTRRIOC_ADD_PAGE_ENTRY |
| 280 | Case cmd == MTRRIOC32_ADD_PAGE_ENTRY |
| 282 | If Not Check operation authority Then Return -EPERM |
| 284 | err = mtrr_file_add(Base address , Size of region , Type of region , true, file, 1) |
| 287 | Break |
| 288 | Case cmd == MTRRIOC_SET_PAGE_ENTRY |
| 290 | Case cmd == MTRRIOC32_SET_PAGE_ENTRY |
| 292 | If Not Check operation authority Then Return -EPERM |
| 296 | Break |
| 297 | Case cmd == MTRRIOC_DEL_PAGE_ENTRY |
| 299 | Case cmd == MTRRIOC32_DEL_PAGE_ENTRY |
| 301 | If Not Check operation authority Then Return -EPERM |
| 303 | err = mtrr_file_del(Base address , Size of region , file, 1) |
| 304 | Break |
| 305 | Case cmd == MTRRIOC_KILL_PAGE_ENTRY |
| 307 | Case cmd == MTRRIOC32_KILL_PAGE_ENTRY |
| 309 | If Not Check operation authority Then Return -EPERM |
| 312 | Break |
| 313 | Case cmd == MTRRIOC_GET_PAGE_ENTRY |
| 315 | Case cmd == MTRRIOC32_GET_PAGE_ENTRY |
| 317 | If Register number >= num_var_ranges Then Return -EINVAL |
| 319 | get( Register number , & base, & size, & type) |
| 321 | If size != size Then Base address = Size of region = Type of region = 0 |
| 323 | Else |
| 328 | Break |
| 335 | Case cmd == MTRRIOC_GET_ENTRY |
| 336 | Case cmd == MTRRIOC_GET_PAGE_ENTRY |
| 341 | Case cmd == MTRRIOC32_GET_ENTRY |
| 342 | Case cmd == MTRRIOC32_GET_PAGE_ENTRY |
| 346 | err = Write a simple value into user space( Base address , & Base address ) |
| 347 | err |= Write a simple value into user space( Size of region , & Size of region ) |
| 349 | err |= Write a simple value into user space( Type of region , & Type of region ) |
| 350 | Break |
| 354 | Return err |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |