diff options
Diffstat (limited to 'drivers/char/rio/rioctrl.c')
-rw-r--r-- | drivers/char/rio/rioctrl.c | 182 |
1 files changed, 95 insertions, 87 deletions
diff --git a/drivers/char/rio/rioctrl.c b/drivers/char/rio/rioctrl.c index 75b2557c37ec..052e8120a471 100644 --- a/drivers/char/rio/rioctrl.c +++ b/drivers/char/rio/rioctrl.c | |||
@@ -80,7 +80,7 @@ static char *_rioctrl_c_sccs_ = "@(#)rioctrl.c 1.3"; | |||
80 | static struct LpbReq LpbReq; | 80 | static struct LpbReq LpbReq; |
81 | static struct RupReq RupReq; | 81 | static struct RupReq RupReq; |
82 | static struct PortReq PortReq; | 82 | static struct PortReq PortReq; |
83 | static struct HostReq HostReq; | 83 | static struct HostReq HostReq; /* oh really? global? and no locking? */ |
84 | static struct HostDpRam HostDpRam; | 84 | static struct HostDpRam HostDpRam; |
85 | static struct DebugCtrl DebugCtrl; | 85 | static struct DebugCtrl DebugCtrl; |
86 | static struct Map MapEnt; | 86 | static struct Map MapEnt; |
@@ -126,12 +126,19 @@ static int | |||
126 | 126 | ||
127 | #define drv_makedev(maj, min) ((((uint) maj & 0xff) << 8) | ((uint) min & 0xff)) | 127 | #define drv_makedev(maj, min) ((((uint) maj & 0xff) << 8) | ((uint) min & 0xff)) |
128 | 128 | ||
129 | int riocontrol(p, dev, cmd, arg, su) | 129 | static int copy_from_io(void __user *to, void __iomem *from, size_t size) |
130 | struct rio_info *p; | 130 | { |
131 | dev_t dev; | 131 | void *buf = kmalloc(size, GFP_KERNEL); |
132 | int cmd; | 132 | int res = -ENOMEM; |
133 | caddr_t arg; | 133 | if (buf) { |
134 | int su; | 134 | rio_memcpy_fromio(buf, from, size); |
135 | res = copy_to_user(to, buf, size); | ||
136 | kfree(buf); | ||
137 | } | ||
138 | return res; | ||
139 | } | ||
140 | |||
141 | int riocontrol(struct rio_info *p, dev_t dev, int cmd, unsigned long arg, int su) | ||
135 | { | 142 | { |
136 | uint Host; /* leave me unsigned! */ | 143 | uint Host; /* leave me unsigned! */ |
137 | uint port; /* and me! */ | 144 | uint port; /* and me! */ |
@@ -139,9 +146,10 @@ int su; | |||
139 | ushort loop; | 146 | ushort loop; |
140 | int Entry; | 147 | int Entry; |
141 | struct Port *PortP; | 148 | struct Port *PortP; |
142 | struct PKT *PacketP; | 149 | struct PKT __iomem *PacketP; |
143 | int retval = 0; | 150 | int retval = 0; |
144 | unsigned long flags; | 151 | unsigned long flags; |
152 | void __user *argp = (void __user *)arg; | ||
145 | 153 | ||
146 | func_enter(); | 154 | func_enter(); |
147 | 155 | ||
@@ -149,7 +157,7 @@ int su; | |||
149 | Host = 0; | 157 | Host = 0; |
150 | PortP = NULL; | 158 | PortP = NULL; |
151 | 159 | ||
152 | rio_dprintk(RIO_DEBUG_CTRL, "control ioctl cmd: 0x%x arg: %p\n", cmd, arg); | 160 | rio_dprintk(RIO_DEBUG_CTRL, "control ioctl cmd: 0x%x arg: %p\n", cmd, argp); |
153 | 161 | ||
154 | switch (cmd) { | 162 | switch (cmd) { |
155 | /* | 163 | /* |
@@ -160,11 +168,11 @@ int su; | |||
160 | ** otherwise just the specified host card will be changed. | 168 | ** otherwise just the specified host card will be changed. |
161 | */ | 169 | */ |
162 | case RIO_SET_TIMER: | 170 | case RIO_SET_TIMER: |
163 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_TIMER to %ldms\n", (unsigned long)arg); | 171 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_TIMER to %ldms\n", arg); |
164 | { | 172 | { |
165 | int host, value; | 173 | int host, value; |
166 | host = ((unsigned long) arg >> 16) & 0x0000FFFF; | 174 | host = (arg >> 16) & 0x0000FFFF; |
167 | value = (unsigned long) arg & 0x0000ffff; | 175 | value = arg & 0x0000ffff; |
168 | if (host == -1) { | 176 | if (host == -1) { |
169 | for (host = 0; host < p->RIONumHosts; host++) { | 177 | for (host = 0; host < p->RIONumHosts; host++) { |
170 | if (p->RIOHosts[host].Flags == RC_RUNNING) { | 178 | if (p->RIOHosts[host].Flags == RC_RUNNING) { |
@@ -183,26 +191,26 @@ int su; | |||
183 | 191 | ||
184 | case RIO_FOAD_RTA: | 192 | case RIO_FOAD_RTA: |
185 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_FOAD_RTA\n"); | 193 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_FOAD_RTA\n"); |
186 | return RIOCommandRta(p, (unsigned long)arg, RIOFoadRta); | 194 | return RIOCommandRta(p, arg, RIOFoadRta); |
187 | 195 | ||
188 | case RIO_ZOMBIE_RTA: | 196 | case RIO_ZOMBIE_RTA: |
189 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_ZOMBIE_RTA\n"); | 197 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_ZOMBIE_RTA\n"); |
190 | return RIOCommandRta(p, (unsigned long)arg, RIOZombieRta); | 198 | return RIOCommandRta(p, arg, RIOZombieRta); |
191 | 199 | ||
192 | case RIO_IDENTIFY_RTA: | 200 | case RIO_IDENTIFY_RTA: |
193 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_IDENTIFY_RTA\n"); | 201 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_IDENTIFY_RTA\n"); |
194 | return RIOIdentifyRta(p, arg); | 202 | return RIOIdentifyRta(p, argp); |
195 | 203 | ||
196 | case RIO_KILL_NEIGHBOUR: | 204 | case RIO_KILL_NEIGHBOUR: |
197 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_KILL_NEIGHBOUR\n"); | 205 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_KILL_NEIGHBOUR\n"); |
198 | return RIOKillNeighbour(p, arg); | 206 | return RIOKillNeighbour(p, argp); |
199 | 207 | ||
200 | case SPECIAL_RUP_CMD: | 208 | case SPECIAL_RUP_CMD: |
201 | { | 209 | { |
202 | struct CmdBlk *CmdBlkP; | 210 | struct CmdBlk *CmdBlkP; |
203 | 211 | ||
204 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD\n"); | 212 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD\n"); |
205 | if (copy_from_user(&SpecialRupCmd, arg, sizeof(SpecialRupCmd))) { | 213 | if (copy_from_user(&SpecialRupCmd, argp, sizeof(SpecialRupCmd))) { |
206 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD copy failed\n"); | 214 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD copy failed\n"); |
207 | p->RIOError.Error = COPYIN_FAILED; | 215 | p->RIOError.Error = COPYIN_FAILED; |
208 | return -EFAULT; | 216 | return -EFAULT; |
@@ -239,7 +247,7 @@ int su; | |||
239 | if ((retval = RIOApel(p)) != 0) | 247 | if ((retval = RIOApel(p)) != 0) |
240 | return retval; | 248 | return retval; |
241 | 249 | ||
242 | if (copy_to_user(arg, p->RIOConnectTable, TOTAL_MAP_ENTRIES * sizeof(struct Map))) { | 250 | if (copy_to_user(argp, p->RIOConnectTable, TOTAL_MAP_ENTRIES * sizeof(struct Map))) { |
243 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_TABLE copy failed\n"); | 251 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_TABLE copy failed\n"); |
244 | p->RIOError.Error = COPYOUT_FAILED; | 252 | p->RIOError.Error = COPYOUT_FAILED; |
245 | return -EFAULT; | 253 | return -EFAULT; |
@@ -284,7 +292,7 @@ int su; | |||
284 | p->RIOError.Error = NOT_SUPER_USER; | 292 | p->RIOError.Error = NOT_SUPER_USER; |
285 | return -EPERM; | 293 | return -EPERM; |
286 | } | 294 | } |
287 | if (copy_from_user(&p->RIOConnectTable[0], arg, TOTAL_MAP_ENTRIES * sizeof(struct Map))) { | 295 | if (copy_from_user(&p->RIOConnectTable[0], argp, TOTAL_MAP_ENTRIES * sizeof(struct Map))) { |
288 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_TABLE copy failed\n"); | 296 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_TABLE copy failed\n"); |
289 | p->RIOError.Error = COPYIN_FAILED; | 297 | p->RIOError.Error = COPYIN_FAILED; |
290 | return -EFAULT; | 298 | return -EFAULT; |
@@ -330,7 +338,7 @@ int su; | |||
330 | p->RIOError.Error = NOT_SUPER_USER; | 338 | p->RIOError.Error = NOT_SUPER_USER; |
331 | return -EPERM; | 339 | return -EPERM; |
332 | } | 340 | } |
333 | if (copy_to_user(arg, p->RIOBindTab, (sizeof(ulong) * MAX_RTA_BINDINGS))) { | 341 | if (copy_to_user(argp, p->RIOBindTab, (sizeof(ulong) * MAX_RTA_BINDINGS))) { |
334 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_BINDINGS copy failed\n"); | 342 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_BINDINGS copy failed\n"); |
335 | p->RIOError.Error = COPYOUT_FAILED; | 343 | p->RIOError.Error = COPYOUT_FAILED; |
336 | return -EFAULT; | 344 | return -EFAULT; |
@@ -349,7 +357,7 @@ int su; | |||
349 | p->RIOError.Error = NOT_SUPER_USER; | 357 | p->RIOError.Error = NOT_SUPER_USER; |
350 | return -EPERM; | 358 | return -EPERM; |
351 | } | 359 | } |
352 | if (copy_from_user(&p->RIOBindTab[0], arg, (sizeof(ulong) * MAX_RTA_BINDINGS))) { | 360 | if (copy_from_user(&p->RIOBindTab[0], argp, (sizeof(ulong) * MAX_RTA_BINDINGS))) { |
353 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS copy failed\n"); | 361 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS copy failed\n"); |
354 | p->RIOError.Error = COPYIN_FAILED; | 362 | p->RIOError.Error = COPYIN_FAILED; |
355 | return -EFAULT; | 363 | return -EFAULT; |
@@ -373,12 +381,12 @@ int su; | |||
373 | for (Entry = 0; Entry < MAX_RTA_BINDINGS; Entry++) { | 381 | for (Entry = 0; Entry < MAX_RTA_BINDINGS; Entry++) { |
374 | if ((EmptySlot == -1) && (p->RIOBindTab[Entry] == 0L)) | 382 | if ((EmptySlot == -1) && (p->RIOBindTab[Entry] == 0L)) |
375 | EmptySlot = Entry; | 383 | EmptySlot = Entry; |
376 | else if (p->RIOBindTab[Entry] == (long)arg) { | 384 | else if (p->RIOBindTab[Entry] == arg) { |
377 | /* | 385 | /* |
378 | ** Already exists - delete | 386 | ** Already exists - delete |
379 | */ | 387 | */ |
380 | p->RIOBindTab[Entry] = 0L; | 388 | p->RIOBindTab[Entry] = 0L; |
381 | rio_dprintk(RIO_DEBUG_CTRL, "Removing Rta %ld from p->RIOBindTab\n", (unsigned long)arg); | 389 | rio_dprintk(RIO_DEBUG_CTRL, "Removing Rta %ld from p->RIOBindTab\n", arg); |
382 | return 0; | 390 | return 0; |
383 | } | 391 | } |
384 | } | 392 | } |
@@ -386,10 +394,10 @@ int su; | |||
386 | ** Dosen't exist - add | 394 | ** Dosen't exist - add |
387 | */ | 395 | */ |
388 | if (EmptySlot != -1) { | 396 | if (EmptySlot != -1) { |
389 | p->RIOBindTab[EmptySlot] = (unsigned long)arg; | 397 | p->RIOBindTab[EmptySlot] = arg; |
390 | rio_dprintk(RIO_DEBUG_CTRL, "Adding Rta %lx to p->RIOBindTab\n", (unsigned long) arg); | 398 | rio_dprintk(RIO_DEBUG_CTRL, "Adding Rta %lx to p->RIOBindTab\n", arg); |
391 | } else { | 399 | } else { |
392 | rio_dprintk(RIO_DEBUG_CTRL, "p->RIOBindTab full! - Rta %lx not added\n", (unsigned long) arg); | 400 | rio_dprintk(RIO_DEBUG_CTRL, "p->RIOBindTab full! - Rta %lx not added\n", arg); |
393 | return -ENOMEM; | 401 | return -ENOMEM; |
394 | } | 402 | } |
395 | return 0; | 403 | return 0; |
@@ -397,7 +405,7 @@ int su; | |||
397 | 405 | ||
398 | case RIO_RESUME: | 406 | case RIO_RESUME: |
399 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME\n"); | 407 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME\n"); |
400 | port = (unsigned long) arg; | 408 | port = arg; |
401 | if ((port < 0) || (port > 511)) { | 409 | if ((port < 0) || (port > 511)) { |
402 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Bad port number %d\n", port); | 410 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Bad port number %d\n", port); |
403 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 411 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
@@ -433,7 +441,7 @@ int su; | |||
433 | p->RIOError.Error = NOT_SUPER_USER; | 441 | p->RIOError.Error = NOT_SUPER_USER; |
434 | return -EPERM; | 442 | return -EPERM; |
435 | } | 443 | } |
436 | if (copy_from_user(&MapEnt, arg, sizeof(MapEnt))) { | 444 | if (copy_from_user(&MapEnt, argp, sizeof(MapEnt))) { |
437 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); | 445 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); |
438 | p->RIOError.Error = COPYIN_FAILED; | 446 | p->RIOError.Error = COPYIN_FAILED; |
439 | return -EFAULT; | 447 | return -EFAULT; |
@@ -447,7 +455,7 @@ int su; | |||
447 | p->RIOError.Error = NOT_SUPER_USER; | 455 | p->RIOError.Error = NOT_SUPER_USER; |
448 | return -EPERM; | 456 | return -EPERM; |
449 | } | 457 | } |
450 | if (copy_from_user(&MapEnt, arg, sizeof(MapEnt))) { | 458 | if (copy_from_user(&MapEnt, argp, sizeof(MapEnt))) { |
451 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); | 459 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); |
452 | p->RIOError.Error = COPYIN_FAILED; | 460 | p->RIOError.Error = COPYIN_FAILED; |
453 | return -EFAULT; | 461 | return -EFAULT; |
@@ -461,7 +469,7 @@ int su; | |||
461 | p->RIOError.Error = NOT_SUPER_USER; | 469 | p->RIOError.Error = NOT_SUPER_USER; |
462 | return -EPERM; | 470 | return -EPERM; |
463 | } | 471 | } |
464 | if (copy_from_user(&MapEnt, arg, sizeof(MapEnt))) { | 472 | if (copy_from_user(&MapEnt, argp, sizeof(MapEnt))) { |
465 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from data space failed\n"); | 473 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from data space failed\n"); |
466 | p->RIOError.Error = COPYIN_FAILED; | 474 | p->RIOError.Error = COPYIN_FAILED; |
467 | return -EFAULT; | 475 | return -EFAULT; |
@@ -469,14 +477,14 @@ int su; | |||
469 | return RIODeleteRta(p, &MapEnt); | 477 | return RIODeleteRta(p, &MapEnt); |
470 | 478 | ||
471 | case RIO_QUICK_CHECK: | 479 | case RIO_QUICK_CHECK: |
472 | if (copy_to_user(arg, &p->RIORtaDisCons, sizeof(unsigned int))) { | 480 | if (copy_to_user(argp, &p->RIORtaDisCons, sizeof(unsigned int))) { |
473 | p->RIOError.Error = COPYOUT_FAILED; | 481 | p->RIOError.Error = COPYOUT_FAILED; |
474 | return -EFAULT; | 482 | return -EFAULT; |
475 | } | 483 | } |
476 | return 0; | 484 | return 0; |
477 | 485 | ||
478 | case RIO_LAST_ERROR: | 486 | case RIO_LAST_ERROR: |
479 | if (copy_to_user(arg, &p->RIOError, sizeof(struct Error))) | 487 | if (copy_to_user(argp, &p->RIOError, sizeof(struct Error))) |
480 | return -EFAULT; | 488 | return -EFAULT; |
481 | return 0; | 489 | return 0; |
482 | 490 | ||
@@ -485,7 +493,7 @@ int su; | |||
485 | return -EINVAL; | 493 | return -EINVAL; |
486 | 494 | ||
487 | case RIO_GET_MODTYPE: | 495 | case RIO_GET_MODTYPE: |
488 | if (copy_from_user(&port, arg, sizeof(unsigned int))) { | 496 | if (copy_from_user(&port, argp, sizeof(unsigned int))) { |
489 | p->RIOError.Error = COPYIN_FAILED; | 497 | p->RIOError.Error = COPYIN_FAILED; |
490 | return -EFAULT; | 498 | return -EFAULT; |
491 | } | 499 | } |
@@ -505,7 +513,7 @@ int su; | |||
505 | ** Return module type of port | 513 | ** Return module type of port |
506 | */ | 514 | */ |
507 | port = PortP->HostP->UnixRups[PortP->RupNum].ModTypes; | 515 | port = PortP->HostP->UnixRups[PortP->RupNum].ModTypes; |
508 | if (copy_to_user(arg, &port, sizeof(unsigned int))) { | 516 | if (copy_to_user(argp, &port, sizeof(unsigned int))) { |
509 | p->RIOError.Error = COPYOUT_FAILED; | 517 | p->RIOError.Error = COPYOUT_FAILED; |
510 | return -EFAULT; | 518 | return -EFAULT; |
511 | } | 519 | } |
@@ -521,7 +529,7 @@ int su; | |||
521 | 529 | ||
522 | case RIO_SETUP_PORTS: | 530 | case RIO_SETUP_PORTS: |
523 | rio_dprintk(RIO_DEBUG_CTRL, "Setup ports\n"); | 531 | rio_dprintk(RIO_DEBUG_CTRL, "Setup ports\n"); |
524 | if (copy_from_user(&PortSetup, arg, sizeof(PortSetup))) { | 532 | if (copy_from_user(&PortSetup, argp, sizeof(PortSetup))) { |
525 | p->RIOError.Error = COPYIN_FAILED; | 533 | p->RIOError.Error = COPYIN_FAILED; |
526 | rio_dprintk(RIO_DEBUG_CTRL, "EFAULT"); | 534 | rio_dprintk(RIO_DEBUG_CTRL, "EFAULT"); |
527 | return -EFAULT; | 535 | return -EFAULT; |
@@ -551,7 +559,7 @@ int su; | |||
551 | 559 | ||
552 | case RIO_GET_PORT_SETUP: | 560 | case RIO_GET_PORT_SETUP: |
553 | rio_dprintk(RIO_DEBUG_CTRL, "Get port setup\n"); | 561 | rio_dprintk(RIO_DEBUG_CTRL, "Get port setup\n"); |
554 | if (copy_from_user(&PortSetup, arg, sizeof(PortSetup))) { | 562 | if (copy_from_user(&PortSetup, argp, sizeof(PortSetup))) { |
555 | p->RIOError.Error = COPYIN_FAILED; | 563 | p->RIOError.Error = COPYIN_FAILED; |
556 | return -EFAULT; | 564 | return -EFAULT; |
557 | } | 565 | } |
@@ -572,7 +580,7 @@ int su; | |||
572 | PortSetup.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; | 580 | PortSetup.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; |
573 | PortSetup.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; | 581 | PortSetup.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; |
574 | 582 | ||
575 | if (copy_to_user(arg, &PortSetup, sizeof(PortSetup))) { | 583 | if (copy_to_user(argp, &PortSetup, sizeof(PortSetup))) { |
576 | p->RIOError.Error = COPYOUT_FAILED; | 584 | p->RIOError.Error = COPYOUT_FAILED; |
577 | return -EFAULT; | 585 | return -EFAULT; |
578 | } | 586 | } |
@@ -580,7 +588,7 @@ int su; | |||
580 | 588 | ||
581 | case RIO_GET_PORT_PARAMS: | 589 | case RIO_GET_PORT_PARAMS: |
582 | rio_dprintk(RIO_DEBUG_CTRL, "Get port params\n"); | 590 | rio_dprintk(RIO_DEBUG_CTRL, "Get port params\n"); |
583 | if (copy_from_user(&PortParams, arg, sizeof(struct PortParams))) { | 591 | if (copy_from_user(&PortParams, argp, sizeof(struct PortParams))) { |
584 | p->RIOError.Error = COPYIN_FAILED; | 592 | p->RIOError.Error = COPYIN_FAILED; |
585 | return -EFAULT; | 593 | return -EFAULT; |
586 | } | 594 | } |
@@ -593,7 +601,7 @@ int su; | |||
593 | PortParams.State = PortP->State; | 601 | PortParams.State = PortP->State; |
594 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortParams.Port); | 602 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortParams.Port); |
595 | 603 | ||
596 | if (copy_to_user(arg, &PortParams, sizeof(struct PortParams))) { | 604 | if (copy_to_user(argp, &PortParams, sizeof(struct PortParams))) { |
597 | p->RIOError.Error = COPYOUT_FAILED; | 605 | p->RIOError.Error = COPYOUT_FAILED; |
598 | return -EFAULT; | 606 | return -EFAULT; |
599 | } | 607 | } |
@@ -601,7 +609,7 @@ int su; | |||
601 | 609 | ||
602 | case RIO_GET_PORT_TTY: | 610 | case RIO_GET_PORT_TTY: |
603 | rio_dprintk(RIO_DEBUG_CTRL, "Get port tty\n"); | 611 | rio_dprintk(RIO_DEBUG_CTRL, "Get port tty\n"); |
604 | if (copy_from_user(&PortTty, arg, sizeof(struct PortTty))) { | 612 | if (copy_from_user(&PortTty, argp, sizeof(struct PortTty))) { |
605 | p->RIOError.Error = COPYIN_FAILED; | 613 | p->RIOError.Error = COPYIN_FAILED; |
606 | return -EFAULT; | 614 | return -EFAULT; |
607 | } | 615 | } |
@@ -612,14 +620,14 @@ int su; | |||
612 | 620 | ||
613 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortTty.port); | 621 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortTty.port); |
614 | PortP = (p->RIOPortp[PortTty.port]); | 622 | PortP = (p->RIOPortp[PortTty.port]); |
615 | if (copy_to_user(arg, &PortTty, sizeof(struct PortTty))) { | 623 | if (copy_to_user(argp, &PortTty, sizeof(struct PortTty))) { |
616 | p->RIOError.Error = COPYOUT_FAILED; | 624 | p->RIOError.Error = COPYOUT_FAILED; |
617 | return -EFAULT; | 625 | return -EFAULT; |
618 | } | 626 | } |
619 | return retval; | 627 | return retval; |
620 | 628 | ||
621 | case RIO_SET_PORT_TTY: | 629 | case RIO_SET_PORT_TTY: |
622 | if (copy_from_user(&PortTty, arg, sizeof(struct PortTty))) { | 630 | if (copy_from_user(&PortTty, argp, sizeof(struct PortTty))) { |
623 | p->RIOError.Error = COPYIN_FAILED; | 631 | p->RIOError.Error = COPYIN_FAILED; |
624 | return -EFAULT; | 632 | return -EFAULT; |
625 | } | 633 | } |
@@ -634,7 +642,7 @@ int su; | |||
634 | 642 | ||
635 | case RIO_SET_PORT_PARAMS: | 643 | case RIO_SET_PORT_PARAMS: |
636 | rio_dprintk(RIO_DEBUG_CTRL, "Set port params\n"); | 644 | rio_dprintk(RIO_DEBUG_CTRL, "Set port params\n"); |
637 | if (copy_from_user(&PortParams, arg, sizeof(PortParams))) { | 645 | if (copy_from_user(&PortParams, argp, sizeof(PortParams))) { |
638 | p->RIOError.Error = COPYIN_FAILED; | 646 | p->RIOError.Error = COPYIN_FAILED; |
639 | return -EFAULT; | 647 | return -EFAULT; |
640 | } | 648 | } |
@@ -650,7 +658,7 @@ int su; | |||
650 | 658 | ||
651 | case RIO_GET_PORT_STATS: | 659 | case RIO_GET_PORT_STATS: |
652 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_PORT_STATS\n"); | 660 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_PORT_STATS\n"); |
653 | if (copy_from_user(&portStats, arg, sizeof(struct portStats))) { | 661 | if (copy_from_user(&portStats, argp, sizeof(struct portStats))) { |
654 | p->RIOError.Error = COPYIN_FAILED; | 662 | p->RIOError.Error = COPYIN_FAILED; |
655 | return -EFAULT; | 663 | return -EFAULT; |
656 | } | 664 | } |
@@ -665,14 +673,14 @@ int su; | |||
665 | portStats.opens = PortP->opens; | 673 | portStats.opens = PortP->opens; |
666 | portStats.closes = PortP->closes; | 674 | portStats.closes = PortP->closes; |
667 | portStats.ioctls = PortP->ioctls; | 675 | portStats.ioctls = PortP->ioctls; |
668 | if (copy_to_user(arg, &portStats, sizeof(struct portStats))) { | 676 | if (copy_to_user(argp, &portStats, sizeof(struct portStats))) { |
669 | p->RIOError.Error = COPYOUT_FAILED; | 677 | p->RIOError.Error = COPYOUT_FAILED; |
670 | return -EFAULT; | 678 | return -EFAULT; |
671 | } | 679 | } |
672 | return retval; | 680 | return retval; |
673 | 681 | ||
674 | case RIO_RESET_PORT_STATS: | 682 | case RIO_RESET_PORT_STATS: |
675 | port = (unsigned long) arg; | 683 | port = arg; |
676 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESET_PORT_STATS\n"); | 684 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESET_PORT_STATS\n"); |
677 | if (port >= RIO_PORTS) { | 685 | if (port >= RIO_PORTS) { |
678 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 686 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
@@ -690,7 +698,7 @@ int su; | |||
690 | 698 | ||
691 | case RIO_GATHER_PORT_STATS: | 699 | case RIO_GATHER_PORT_STATS: |
692 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GATHER_PORT_STATS\n"); | 700 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GATHER_PORT_STATS\n"); |
693 | if (copy_from_user(&portStats, arg, sizeof(struct portStats))) { | 701 | if (copy_from_user(&portStats, argp, sizeof(struct portStats))) { |
694 | p->RIOError.Error = COPYIN_FAILED; | 702 | p->RIOError.Error = COPYIN_FAILED; |
695 | return -EFAULT; | 703 | return -EFAULT; |
696 | } | 704 | } |
@@ -706,7 +714,7 @@ int su; | |||
706 | 714 | ||
707 | case RIO_READ_CONFIG: | 715 | case RIO_READ_CONFIG: |
708 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_CONFIG\n"); | 716 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_CONFIG\n"); |
709 | if (copy_to_user(arg, &p->RIOConf, sizeof(struct Conf))) { | 717 | if (copy_to_user(argp, &p->RIOConf, sizeof(struct Conf))) { |
710 | p->RIOError.Error = COPYOUT_FAILED; | 718 | p->RIOError.Error = COPYOUT_FAILED; |
711 | return -EFAULT; | 719 | return -EFAULT; |
712 | } | 720 | } |
@@ -718,7 +726,7 @@ int su; | |||
718 | p->RIOError.Error = NOT_SUPER_USER; | 726 | p->RIOError.Error = NOT_SUPER_USER; |
719 | return -EPERM; | 727 | return -EPERM; |
720 | } | 728 | } |
721 | if (copy_from_user(&p->RIOConf, arg, sizeof(struct Conf))) { | 729 | if (copy_from_user(&p->RIOConf, argp, sizeof(struct Conf))) { |
722 | p->RIOError.Error = COPYIN_FAILED; | 730 | p->RIOError.Error = COPYIN_FAILED; |
723 | return -EFAULT; | 731 | return -EFAULT; |
724 | } | 732 | } |
@@ -746,7 +754,7 @@ int su; | |||
746 | case RIO_SETDEBUG: | 754 | case RIO_SETDEBUG: |
747 | case RIO_GETDEBUG: | 755 | case RIO_GETDEBUG: |
748 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SETDEBUG/RIO_GETDEBUG\n"); | 756 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SETDEBUG/RIO_GETDEBUG\n"); |
749 | if (copy_from_user(&DebugCtrl, arg, sizeof(DebugCtrl))) { | 757 | if (copy_from_user(&DebugCtrl, argp, sizeof(DebugCtrl))) { |
750 | p->RIOError.Error = COPYIN_FAILED; | 758 | p->RIOError.Error = COPYIN_FAILED; |
751 | return -EFAULT; | 759 | return -EFAULT; |
752 | } | 760 | } |
@@ -763,7 +771,7 @@ int su; | |||
763 | rio_dprintk(RIO_DEBUG_CTRL, "Get global debug 0x%x wait 0x%x\n", p->rio_debug, p->RIODebugWait); | 771 | rio_dprintk(RIO_DEBUG_CTRL, "Get global debug 0x%x wait 0x%x\n", p->rio_debug, p->RIODebugWait); |
764 | DebugCtrl.Debug = p->rio_debug; | 772 | DebugCtrl.Debug = p->rio_debug; |
765 | DebugCtrl.Wait = p->RIODebugWait; | 773 | DebugCtrl.Wait = p->RIODebugWait; |
766 | if (copy_to_user(arg, &DebugCtrl, sizeof(DebugCtrl))) { | 774 | if (copy_to_user(argp, &DebugCtrl, sizeof(DebugCtrl))) { |
767 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", DebugCtrl.SysPort); | 775 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", DebugCtrl.SysPort); |
768 | p->RIOError.Error = COPYOUT_FAILED; | 776 | p->RIOError.Error = COPYOUT_FAILED; |
769 | return -EFAULT; | 777 | return -EFAULT; |
@@ -785,7 +793,7 @@ int su; | |||
785 | } else { | 793 | } else { |
786 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG 0x%x\n", p->RIOPortp[DebugCtrl.SysPort]->Debug); | 794 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG 0x%x\n", p->RIOPortp[DebugCtrl.SysPort]->Debug); |
787 | DebugCtrl.Debug = p->RIOPortp[DebugCtrl.SysPort]->Debug; | 795 | DebugCtrl.Debug = p->RIOPortp[DebugCtrl.SysPort]->Debug; |
788 | if (copy_to_user(arg, &DebugCtrl, sizeof(DebugCtrl))) { | 796 | if (copy_to_user(argp, &DebugCtrl, sizeof(DebugCtrl))) { |
789 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG: Bad copy to user space\n"); | 797 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG: Bad copy to user space\n"); |
790 | p->RIOError.Error = COPYOUT_FAILED; | 798 | p->RIOError.Error = COPYOUT_FAILED; |
791 | return -EFAULT; | 799 | return -EFAULT; |
@@ -800,7 +808,7 @@ int su; | |||
800 | ** textual null terminated string. | 808 | ** textual null terminated string. |
801 | */ | 809 | */ |
802 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID\n"); | 810 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID\n"); |
803 | if (copy_to_user(arg, RIOVersid(), sizeof(struct rioVersion))) { | 811 | if (copy_to_user(argp, RIOVersid(), sizeof(struct rioVersion))) { |
804 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID: Bad copy to user space (host=%d)\n", Host); | 812 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID: Bad copy to user space (host=%d)\n", Host); |
805 | p->RIOError.Error = COPYOUT_FAILED; | 813 | p->RIOError.Error = COPYOUT_FAILED; |
806 | return -EFAULT; | 814 | return -EFAULT; |
@@ -813,7 +821,7 @@ int su; | |||
813 | ** at init time. | 821 | ** at init time. |
814 | */ | 822 | */ |
815 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS\n"); | 823 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS\n"); |
816 | if (copy_to_user(arg, &p->RIONumHosts, sizeof(p->RIONumHosts))) { | 824 | if (copy_to_user(argp, &p->RIONumHosts, sizeof(p->RIONumHosts))) { |
817 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS: Bad copy to user space\n"); | 825 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS: Bad copy to user space\n"); |
818 | p->RIOError.Error = COPYOUT_FAILED; | 826 | p->RIOError.Error = COPYOUT_FAILED; |
819 | return -EFAULT; | 827 | return -EFAULT; |
@@ -824,7 +832,7 @@ int su; | |||
824 | /* | 832 | /* |
825 | ** Kill host. This may not be in the final version... | 833 | ** Kill host. This may not be in the final version... |
826 | */ | 834 | */ |
827 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD %ld\n", (unsigned long) arg); | 835 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD %ld\n", arg); |
828 | if (!su) { | 836 | if (!su) { |
829 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD: Not super user\n"); | 837 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD: Not super user\n"); |
830 | p->RIOError.Error = NOT_SUPER_USER; | 838 | p->RIOError.Error = NOT_SUPER_USER; |
@@ -858,7 +866,7 @@ int su; | |||
858 | p->RIOError.Error = NOT_SUPER_USER; | 866 | p->RIOError.Error = NOT_SUPER_USER; |
859 | return -EPERM; | 867 | return -EPERM; |
860 | } | 868 | } |
861 | if (copy_from_user(&DownLoad, arg, sizeof(DownLoad))) { | 869 | if (copy_from_user(&DownLoad, argp, sizeof(DownLoad))) { |
862 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Copy in from user space failed\n"); | 870 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Copy in from user space failed\n"); |
863 | p->RIOError.Error = COPYIN_FAILED; | 871 | p->RIOError.Error = COPYIN_FAILED; |
864 | return -EFAULT; | 872 | return -EFAULT; |
@@ -888,7 +896,7 @@ int su; | |||
888 | { | 896 | { |
889 | unsigned int host; | 897 | unsigned int host; |
890 | 898 | ||
891 | if (copy_from_user(&host, arg, sizeof(host))) { | 899 | if (copy_from_user(&host, argp, sizeof(host))) { |
892 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); | 900 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); |
893 | p->RIOError.Error = COPYIN_FAILED; | 901 | p->RIOError.Error = COPYIN_FAILED; |
894 | return -EFAULT; | 902 | return -EFAULT; |
@@ -897,7 +905,7 @@ int su; | |||
897 | ** Fetch the parmmap | 905 | ** Fetch the parmmap |
898 | */ | 906 | */ |
899 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS\n"); | 907 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS\n"); |
900 | if (copy_to_user(arg, p->RIOHosts[host].ParmMapP, sizeof(PARM_MAP))) { | 908 | if (copy_from_io(argp, p->RIOHosts[host].ParmMapP, sizeof(PARM_MAP))) { |
901 | p->RIOError.Error = COPYOUT_FAILED; | 909 | p->RIOError.Error = COPYOUT_FAILED; |
902 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS: Copy out to user space failed\n"); | 910 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS: Copy out to user space failed\n"); |
903 | return -EFAULT; | 911 | return -EFAULT; |
@@ -907,7 +915,7 @@ int su; | |||
907 | 915 | ||
908 | case RIO_HOST_REQ: | 916 | case RIO_HOST_REQ: |
909 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ\n"); | 917 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ\n"); |
910 | if (copy_from_user(&HostReq, arg, sizeof(HostReq))) { | 918 | if (copy_from_user(&HostReq, argp, sizeof(HostReq))) { |
911 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); | 919 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); |
912 | p->RIOError.Error = COPYIN_FAILED; | 920 | p->RIOError.Error = COPYIN_FAILED; |
913 | return -EFAULT; | 921 | return -EFAULT; |
@@ -928,7 +936,7 @@ int su; | |||
928 | 936 | ||
929 | case RIO_HOST_DPRAM: | 937 | case RIO_HOST_DPRAM: |
930 | rio_dprintk(RIO_DEBUG_CTRL, "Request for DPRAM\n"); | 938 | rio_dprintk(RIO_DEBUG_CTRL, "Request for DPRAM\n"); |
931 | if (copy_from_user(&HostDpRam, arg, sizeof(HostDpRam))) { | 939 | if (copy_from_user(&HostDpRam, argp, sizeof(HostDpRam))) { |
932 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Copy in from user space failed\n"); | 940 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Copy in from user space failed\n"); |
933 | p->RIOError.Error = COPYIN_FAILED; | 941 | p->RIOError.Error = COPYIN_FAILED; |
934 | return -EFAULT; | 942 | return -EFAULT; |
@@ -945,13 +953,13 @@ int su; | |||
945 | /* It's hardware like this that really gets on my tits. */ | 953 | /* It's hardware like this that really gets on my tits. */ |
946 | static unsigned char copy[sizeof(struct DpRam)]; | 954 | static unsigned char copy[sizeof(struct DpRam)]; |
947 | for (off = 0; off < sizeof(struct DpRam); off++) | 955 | for (off = 0; off < sizeof(struct DpRam); off++) |
948 | copy[off] = readb(&p->RIOHosts[HostDpRam.HostNum].Caddr[off]); | 956 | copy[off] = readb(p->RIOHosts[HostDpRam.HostNum].Caddr + off); |
949 | if (copy_to_user(HostDpRam.DpRamP, copy, sizeof(struct DpRam))) { | 957 | if (copy_to_user(HostDpRam.DpRamP, copy, sizeof(struct DpRam))) { |
950 | p->RIOError.Error = COPYOUT_FAILED; | 958 | p->RIOError.Error = COPYOUT_FAILED; |
951 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); | 959 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); |
952 | return -EFAULT; | 960 | return -EFAULT; |
953 | } | 961 | } |
954 | } else if (copy_to_user(HostDpRam.DpRamP, p->RIOHosts[HostDpRam.HostNum].Caddr, sizeof(struct DpRam))) { | 962 | } else if (copy_from_io(HostDpRam.DpRamP, p->RIOHosts[HostDpRam.HostNum].Caddr, sizeof(struct DpRam))) { |
955 | p->RIOError.Error = COPYOUT_FAILED; | 963 | p->RIOError.Error = COPYOUT_FAILED; |
956 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); | 964 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); |
957 | return -EFAULT; | 965 | return -EFAULT; |
@@ -960,13 +968,13 @@ int su; | |||
960 | 968 | ||
961 | case RIO_SET_BUSY: | 969 | case RIO_SET_BUSY: |
962 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY\n"); | 970 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY\n"); |
963 | if ((unsigned long) arg > 511) { | 971 | if (arg > 511) { |
964 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY: Bad port number %ld\n", (unsigned long) arg); | 972 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY: Bad port number %ld\n", arg); |
965 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 973 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
966 | return -EINVAL; | 974 | return -EINVAL; |
967 | } | 975 | } |
968 | rio_spin_lock_irqsave(&PortP->portSem, flags); | 976 | rio_spin_lock_irqsave(&PortP->portSem, flags); |
969 | p->RIOPortp[(unsigned long) arg]->State |= RIO_BUSY; | 977 | p->RIOPortp[arg]->State |= RIO_BUSY; |
970 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); | 978 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); |
971 | return retval; | 979 | return retval; |
972 | 980 | ||
@@ -976,7 +984,7 @@ int su; | |||
976 | ** (probably for debug reasons) | 984 | ** (probably for debug reasons) |
977 | */ | 985 | */ |
978 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT\n"); | 986 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT\n"); |
979 | if (copy_from_user(&PortReq, arg, sizeof(PortReq))) { | 987 | if (copy_from_user(&PortReq, argp, sizeof(PortReq))) { |
980 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Copy in from user space failed\n"); | 988 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Copy in from user space failed\n"); |
981 | p->RIOError.Error = COPYIN_FAILED; | 989 | p->RIOError.Error = COPYIN_FAILED; |
982 | return -EFAULT; | 990 | return -EFAULT; |
@@ -1001,7 +1009,7 @@ int su; | |||
1001 | ** (probably for debug reasons) | 1009 | ** (probably for debug reasons) |
1002 | */ | 1010 | */ |
1003 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP\n"); | 1011 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP\n"); |
1004 | if (copy_from_user(&RupReq, arg, sizeof(RupReq))) { | 1012 | if (copy_from_user(&RupReq, argp, sizeof(RupReq))) { |
1005 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Copy in from user space failed\n"); | 1013 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Copy in from user space failed\n"); |
1006 | p->RIOError.Error = COPYIN_FAILED; | 1014 | p->RIOError.Error = COPYIN_FAILED; |
1007 | return -EFAULT; | 1015 | return -EFAULT; |
@@ -1025,7 +1033,7 @@ int su; | |||
1025 | } | 1033 | } |
1026 | rio_dprintk(RIO_DEBUG_CTRL, "Request for rup %d from host %d\n", RupReq.RupNum, RupReq.HostNum); | 1034 | rio_dprintk(RIO_DEBUG_CTRL, "Request for rup %d from host %d\n", RupReq.RupNum, RupReq.HostNum); |
1027 | 1035 | ||
1028 | if (copy_to_user(HostP->UnixRups[RupReq.RupNum].RupP, RupReq.RupP, sizeof(struct RUP))) { | 1036 | if (copy_from_io(RupReq.RupP, HostP->UnixRups[RupReq.RupNum].RupP, sizeof(struct RUP))) { |
1029 | p->RIOError.Error = COPYOUT_FAILED; | 1037 | p->RIOError.Error = COPYOUT_FAILED; |
1030 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Bad copy to user space\n"); | 1038 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Bad copy to user space\n"); |
1031 | return -EFAULT; | 1039 | return -EFAULT; |
@@ -1038,7 +1046,7 @@ int su; | |||
1038 | ** (probably for debug reasons) | 1046 | ** (probably for debug reasons) |
1039 | */ | 1047 | */ |
1040 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB\n"); | 1048 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB\n"); |
1041 | if (copy_from_user(&LpbReq, arg, sizeof(LpbReq))) { | 1049 | if (copy_from_user(&LpbReq, argp, sizeof(LpbReq))) { |
1042 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy from user space\n"); | 1050 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy from user space\n"); |
1043 | p->RIOError.Error = COPYIN_FAILED; | 1051 | p->RIOError.Error = COPYIN_FAILED; |
1044 | return -EFAULT; | 1052 | return -EFAULT; |
@@ -1062,7 +1070,7 @@ int su; | |||
1062 | } | 1070 | } |
1063 | rio_dprintk(RIO_DEBUG_CTRL, "Request for lpb %d from host %d\n", LpbReq.Link, LpbReq.Host); | 1071 | rio_dprintk(RIO_DEBUG_CTRL, "Request for lpb %d from host %d\n", LpbReq.Link, LpbReq.Host); |
1064 | 1072 | ||
1065 | if (copy_to_user(LpbReq.LpbP, &HostP->LinkStrP[LpbReq.Link], sizeof(struct LPB))) { | 1073 | if (copy_from_io(LpbReq.LpbP, &HostP->LinkStrP[LpbReq.Link], sizeof(struct LPB))) { |
1066 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy to user space\n"); | 1074 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy to user space\n"); |
1067 | p->RIOError.Error = COPYOUT_FAILED; | 1075 | p->RIOError.Error = COPYOUT_FAILED; |
1068 | return -EFAULT; | 1076 | return -EFAULT; |
@@ -1136,7 +1144,7 @@ int su; | |||
1136 | case RIO_MAP_B110_TO_110: | 1144 | case RIO_MAP_B110_TO_110: |
1137 | case RIO_MAP_B110_TO_115200: | 1145 | case RIO_MAP_B110_TO_115200: |
1138 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping\n"); | 1146 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping\n"); |
1139 | port = (unsigned long) arg; | 1147 | port = arg; |
1140 | if (port < 0 || port > 511) { | 1148 | if (port < 0 || port > 511) { |
1141 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", port); | 1149 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", port); |
1142 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 1150 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
@@ -1166,7 +1174,7 @@ int su; | |||
1166 | 1174 | ||
1167 | case RIO_SEND_PACKET: | 1175 | case RIO_SEND_PACKET: |
1168 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET\n"); | 1176 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET\n"); |
1169 | if (copy_from_user(&SendPack, arg, sizeof(SendPack))) { | 1177 | if (copy_from_user(&SendPack, argp, sizeof(SendPack))) { |
1170 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET: Bad copy from user space\n"); | 1178 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET: Bad copy from user space\n"); |
1171 | p->RIOError.Error = COPYIN_FAILED; | 1179 | p->RIOError.Error = COPYIN_FAILED; |
1172 | return -EFAULT; | 1180 | return -EFAULT; |
@@ -1210,7 +1218,7 @@ int su; | |||
1210 | return su ? 0 : -EPERM; | 1218 | return su ? 0 : -EPERM; |
1211 | 1219 | ||
1212 | case RIO_WHAT_MESG: | 1220 | case RIO_WHAT_MESG: |
1213 | if (copy_to_user(arg, &p->RIONoMessage, sizeof(p->RIONoMessage))) { | 1221 | if (copy_to_user(argp, &p->RIONoMessage, sizeof(p->RIONoMessage))) { |
1214 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_WHAT_MESG: Bad copy to user space\n"); | 1222 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_WHAT_MESG: Bad copy to user space\n"); |
1215 | p->RIOError.Error = COPYOUT_FAILED; | 1223 | p->RIOError.Error = COPYOUT_FAILED; |
1216 | return -EFAULT; | 1224 | return -EFAULT; |
@@ -1218,7 +1226,7 @@ int su; | |||
1218 | return 0; | 1226 | return 0; |
1219 | 1227 | ||
1220 | case RIO_MEM_DUMP: | 1228 | case RIO_MEM_DUMP: |
1221 | if (copy_from_user(&SubCmd, arg, sizeof(struct SubCmdStruct))) { | 1229 | if (copy_from_user(&SubCmd, argp, sizeof(struct SubCmdStruct))) { |
1222 | p->RIOError.Error = COPYIN_FAILED; | 1230 | p->RIOError.Error = COPYIN_FAILED; |
1223 | return -EFAULT; | 1231 | return -EFAULT; |
1224 | } | 1232 | } |
@@ -1248,7 +1256,7 @@ int su; | |||
1248 | PortP->State |= RIO_BUSY; | 1256 | PortP->State |= RIO_BUSY; |
1249 | 1257 | ||
1250 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); | 1258 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); |
1251 | if (copy_to_user(arg, p->RIOMemDump, MEMDUMP_SIZE)) { | 1259 | if (copy_to_user(argp, p->RIOMemDump, MEMDUMP_SIZE)) { |
1252 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_MEM_DUMP copy failed\n"); | 1260 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_MEM_DUMP copy failed\n"); |
1253 | p->RIOError.Error = COPYOUT_FAILED; | 1261 | p->RIOError.Error = COPYOUT_FAILED; |
1254 | return -EFAULT; | 1262 | return -EFAULT; |
@@ -1256,30 +1264,30 @@ int su; | |||
1256 | return 0; | 1264 | return 0; |
1257 | 1265 | ||
1258 | case RIO_TICK: | 1266 | case RIO_TICK: |
1259 | if ((unsigned long) arg >= p->RIONumHosts) | 1267 | if (arg >= p->RIONumHosts) |
1260 | return -EINVAL; | 1268 | return -EINVAL; |
1261 | rio_dprintk(RIO_DEBUG_CTRL, "Set interrupt for host %ld\n", (unsigned long) arg); | 1269 | rio_dprintk(RIO_DEBUG_CTRL, "Set interrupt for host %ld\n", arg); |
1262 | writeb(0xFF, &p->RIOHosts[(unsigned long) arg].SetInt); | 1270 | writeb(0xFF, &p->RIOHosts[arg].SetInt); |
1263 | return 0; | 1271 | return 0; |
1264 | 1272 | ||
1265 | case RIO_TOCK: | 1273 | case RIO_TOCK: |
1266 | if ((unsigned long) arg >= p->RIONumHosts) | 1274 | if (arg >= p->RIONumHosts) |
1267 | return -EINVAL; | 1275 | return -EINVAL; |
1268 | rio_dprintk(RIO_DEBUG_CTRL, "Clear interrupt for host %ld\n", (unsigned long) arg); | 1276 | rio_dprintk(RIO_DEBUG_CTRL, "Clear interrupt for host %ld\n", arg); |
1269 | writeb(0xFF, &p->RIOHosts[(unsigned long) arg].ResetInt); | 1277 | writeb(0xFF, &p->RIOHosts[arg].ResetInt); |
1270 | return 0; | 1278 | return 0; |
1271 | 1279 | ||
1272 | case RIO_READ_CHECK: | 1280 | case RIO_READ_CHECK: |
1273 | /* Check reads for pkts with data[0] the same */ | 1281 | /* Check reads for pkts with data[0] the same */ |
1274 | p->RIOReadCheck = !p->RIOReadCheck; | 1282 | p->RIOReadCheck = !p->RIOReadCheck; |
1275 | if (copy_to_user(arg, &p->RIOReadCheck, sizeof(unsigned int))) { | 1283 | if (copy_to_user(argp, &p->RIOReadCheck, sizeof(unsigned int))) { |
1276 | p->RIOError.Error = COPYOUT_FAILED; | 1284 | p->RIOError.Error = COPYOUT_FAILED; |
1277 | return -EFAULT; | 1285 | return -EFAULT; |
1278 | } | 1286 | } |
1279 | return 0; | 1287 | return 0; |
1280 | 1288 | ||
1281 | case RIO_READ_REGISTER: | 1289 | case RIO_READ_REGISTER: |
1282 | if (copy_from_user(&SubCmd, arg, sizeof(struct SubCmdStruct))) { | 1290 | if (copy_from_user(&SubCmd, argp, sizeof(struct SubCmdStruct))) { |
1283 | p->RIOError.Error = COPYIN_FAILED; | 1291 | p->RIOError.Error = COPYIN_FAILED; |
1284 | return -EFAULT; | 1292 | return -EFAULT; |
1285 | } | 1293 | } |
@@ -1314,7 +1322,7 @@ int su; | |||
1314 | PortP->State |= RIO_BUSY; | 1322 | PortP->State |= RIO_BUSY; |
1315 | 1323 | ||
1316 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); | 1324 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); |
1317 | if (copy_to_user(arg, &p->CdRegister, sizeof(unsigned int))) { | 1325 | if (copy_to_user(argp, &p->CdRegister, sizeof(unsigned int))) { |
1318 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_REGISTER copy failed\n"); | 1326 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_REGISTER copy failed\n"); |
1319 | p->RIOError.Error = COPYOUT_FAILED; | 1327 | p->RIOError.Error = COPYOUT_FAILED; |
1320 | return -EFAULT; | 1328 | return -EFAULT; |
@@ -1327,10 +1335,10 @@ int su; | |||
1327 | */ | 1335 | */ |
1328 | case RIO_MAKE_DEV: | 1336 | case RIO_MAKE_DEV: |
1329 | { | 1337 | { |
1330 | unsigned int port = (unsigned long) arg & RIO_MODEM_MASK; | 1338 | unsigned int port = arg & RIO_MODEM_MASK; |
1331 | unsigned int ret; | 1339 | unsigned int ret; |
1332 | 1340 | ||
1333 | switch ((unsigned long) arg & RIO_DEV_MASK) { | 1341 | switch (arg & RIO_DEV_MASK) { |
1334 | case RIO_DEV_DIRECT: | 1342 | case RIO_DEV_DIRECT: |
1335 | ret = drv_makedev(MAJOR(dev), port); | 1343 | ret = drv_makedev(MAJOR(dev), port); |
1336 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev direct 0x%x is 0x%x\n", port, ret); | 1344 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev direct 0x%x is 0x%x\n", port, ret); |
@@ -1358,7 +1366,7 @@ int su; | |||
1358 | int mino; | 1366 | int mino; |
1359 | unsigned long ret; | 1367 | unsigned long ret; |
1360 | 1368 | ||
1361 | dv = (dev_t) ((unsigned long) arg); | 1369 | dv = (dev_t) (arg); |
1362 | mino = RIO_UNMODEM(dv); | 1370 | mino = RIO_UNMODEM(dv); |
1363 | 1371 | ||
1364 | if (RIO_ISMODEM(dv)) { | 1372 | if (RIO_ISMODEM(dv)) { |