diff options
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/rio/rioctrl.c | 390 |
1 files changed, 118 insertions, 272 deletions
diff --git a/drivers/char/rio/rioctrl.c b/drivers/char/rio/rioctrl.c index fcf18a061228..f6a19aae1044 100644 --- a/drivers/char/rio/rioctrl.c +++ b/drivers/char/rio/rioctrl.c | |||
@@ -131,30 +131,6 @@ static int | |||
131 | 131 | ||
132 | #define drv_makedev(maj, min) ((((uint) maj & 0xff) << 8) | ((uint) min & 0xff)) | 132 | #define drv_makedev(maj, min) ((((uint) maj & 0xff) << 8) | ((uint) min & 0xff)) |
133 | 133 | ||
134 | int copyin(int arg, caddr_t dp, int siz) | ||
135 | { | ||
136 | int rv; | ||
137 | |||
138 | rio_dprintk(RIO_DEBUG_CTRL, "Copying %d bytes from user %p to %p.\n", siz, (void *) arg, dp); | ||
139 | rv = copy_from_user(dp, (void *) arg, siz); | ||
140 | if (rv) | ||
141 | return COPYFAIL; | ||
142 | else | ||
143 | return rv; | ||
144 | } | ||
145 | |||
146 | static int copyout(caddr_t dp, int arg, int siz) | ||
147 | { | ||
148 | int rv; | ||
149 | |||
150 | rio_dprintk(RIO_DEBUG_CTRL, "Copying %d bytes to user %p from %p.\n", siz, (void *) arg, dp); | ||
151 | rv = copy_to_user((void *) arg, dp, siz); | ||
152 | if (rv) | ||
153 | return COPYFAIL; | ||
154 | else | ||
155 | return rv; | ||
156 | } | ||
157 | |||
158 | int riocontrol(p, dev, cmd, arg, su) | 134 | int riocontrol(p, dev, cmd, arg, su) |
159 | struct rio_info *p; | 135 | struct rio_info *p; |
160 | dev_t dev; | 136 | dev_t dev; |
@@ -178,7 +154,7 @@ int su; | |||
178 | Host = 0; | 154 | Host = 0; |
179 | PortP = NULL; | 155 | PortP = NULL; |
180 | 156 | ||
181 | rio_dprintk(RIO_DEBUG_CTRL, "control ioctl cmd: 0x%x arg: 0x%x\n", cmd, (int) arg); | 157 | rio_dprintk(RIO_DEBUG_CTRL, "control ioctl cmd: 0x%x arg: 0x%p\n", cmd, arg); |
182 | 158 | ||
183 | switch (cmd) { | 159 | switch (cmd) { |
184 | /* | 160 | /* |
@@ -189,90 +165,34 @@ int su; | |||
189 | ** otherwise just the specified host card will be changed. | 165 | ** otherwise just the specified host card will be changed. |
190 | */ | 166 | */ |
191 | case RIO_SET_TIMER: | 167 | case RIO_SET_TIMER: |
192 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_TIMER to %dms\n", (uint) arg); | 168 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_TIMER to %ldms\n", (unsigned long)arg); |
193 | { | 169 | { |
194 | int host, value; | 170 | int host, value; |
195 | host = (uint) arg >> 16; | 171 | host = ((unsigned long) arg >> 16) & 0x0000FFFF; |
196 | value = (uint) arg & 0x0000ffff; | 172 | value = (unsigned long) arg & 0x0000ffff; |
197 | if (host == -1) { | 173 | if (host == -1) { |
198 | for (host = 0; host < p->RIONumHosts; host++) { | 174 | for (host = 0; host < p->RIONumHosts; host++) { |
199 | if (p->RIOHosts[host].Flags == RC_RUNNING) { | 175 | if (p->RIOHosts[host].Flags == RC_RUNNING) { |
200 | WWORD(p->RIOHosts[host].ParmMapP->timer, value); | 176 | writew(value, &p->RIOHosts[host].ParmMapP->timer); |
201 | } | 177 | } |
202 | } | 178 | } |
203 | } else if (host >= p->RIONumHosts) { | 179 | } else if (host >= p->RIONumHosts) { |
204 | return -EINVAL; | 180 | return -EINVAL; |
205 | } else { | 181 | } else { |
206 | if (p->RIOHosts[host].Flags == RC_RUNNING) { | 182 | if (p->RIOHosts[host].Flags == RC_RUNNING) { |
207 | WWORD(p->RIOHosts[host].ParmMapP->timer, value); | 183 | writew(value, &p->RIOHosts[host].ParmMapP->timer); |
208 | } | 184 | } |
209 | } | 185 | } |
210 | } | 186 | } |
211 | return 0; | 187 | return 0; |
212 | 188 | ||
213 | case RIO_IDENTIFY_DRIVER: | ||
214 | /* | ||
215 | ** 15.10.1998 ARG - ESIL 0760 part fix | ||
216 | ** Added driver ident string output. | ||
217 | ** | ||
218 | #ifndef __THIS_RELEASE__ | ||
219 | #warning Driver Version string not defined ! | ||
220 | #endif | ||
221 | cprintf("%s %s %s %s\n", | ||
222 | RIO_DRV_STR, | ||
223 | __THIS_RELEASE__, | ||
224 | __DATE__, __TIME__ ); | ||
225 | |||
226 | return 0; | ||
227 | |||
228 | case RIO_DISPLAY_HOST_CFG: | ||
229 | ** | ||
230 | ** 15.10.1998 ARG - ESIL 0760 part fix | ||
231 | ** Added driver host card ident string output. | ||
232 | ** | ||
233 | ** Note that the only types currently supported | ||
234 | ** are ISA and PCI. Also this driver does not | ||
235 | ** (yet) distinguish between the Old PCI card | ||
236 | ** and the Jet PCI card. In fact I think this | ||
237 | ** driver only supports JET PCI ! | ||
238 | ** | ||
239 | |||
240 | for (Host = 0; Host < p->RIONumHosts; Host++) | ||
241 | { | ||
242 | HostP = &(p->RIOHosts[Host]); | ||
243 | |||
244 | switch ( HostP->Type ) | ||
245 | { | ||
246 | case RIO_AT : | ||
247 | strcpy( host_type, RIO_AT_HOST_STR ); | ||
248 | break; | ||
249 | |||
250 | case RIO_PCI : | ||
251 | strcpy( host_type, RIO_PCI_HOST_STR ); | ||
252 | break; | ||
253 | |||
254 | default : | ||
255 | strcpy( host_type, "Unknown" ); | ||
256 | break; | ||
257 | } | ||
258 | |||
259 | cprintf( | ||
260 | "RIO Host %d - Type:%s Addr:%X IRQ:%d\n", | ||
261 | Host, host_type, | ||
262 | (uint)HostP->PaddrP, | ||
263 | (int)HostP->Ivec - 32 ); | ||
264 | } | ||
265 | return 0; | ||
266 | ** | ||
267 | */ | ||
268 | |||
269 | case RIO_FOAD_RTA: | 189 | case RIO_FOAD_RTA: |
270 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_FOAD_RTA\n"); | 190 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_FOAD_RTA\n"); |
271 | return RIOCommandRta(p, (uint) arg, RIOFoadRta); | 191 | return RIOCommandRta(p, (unsigned long)arg, RIOFoadRta); |
272 | 192 | ||
273 | case RIO_ZOMBIE_RTA: | 193 | case RIO_ZOMBIE_RTA: |
274 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_ZOMBIE_RTA\n"); | 194 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_ZOMBIE_RTA\n"); |
275 | return RIOCommandRta(p, (uint) arg, RIOZombieRta); | 195 | return RIOCommandRta(p, (unsigned long)arg, RIOZombieRta); |
276 | 196 | ||
277 | case RIO_IDENTIFY_RTA: | 197 | case RIO_IDENTIFY_RTA: |
278 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_IDENTIFY_RTA\n"); | 198 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_IDENTIFY_RTA\n"); |
@@ -287,7 +207,7 @@ int su; | |||
287 | struct CmdBlk *CmdBlkP; | 207 | struct CmdBlk *CmdBlkP; |
288 | 208 | ||
289 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD\n"); | 209 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD\n"); |
290 | if (copyin((int) arg, (caddr_t) & SpecialRupCmd, sizeof(SpecialRupCmd)) == COPYFAIL) { | 210 | if (copy_from_user(&SpecialRupCmd, arg, sizeof(SpecialRupCmd))) { |
291 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD copy failed\n"); | 211 | rio_dprintk(RIO_DEBUG_CTRL, "SPECIAL_RUP_CMD copy failed\n"); |
292 | p->RIOError.Error = COPYIN_FAILED; | 212 | p->RIOError.Error = COPYIN_FAILED; |
293 | return -EFAULT; | 213 | return -EFAULT; |
@@ -302,7 +222,7 @@ int su; | |||
302 | SpecialRupCmd.Host = 0; | 222 | SpecialRupCmd.Host = 0; |
303 | rio_dprintk(RIO_DEBUG_CTRL, "Queue special rup command for host %d rup %d\n", SpecialRupCmd.Host, SpecialRupCmd.RupNum); | 223 | rio_dprintk(RIO_DEBUG_CTRL, "Queue special rup command for host %d rup %d\n", SpecialRupCmd.Host, SpecialRupCmd.RupNum); |
304 | if (RIOQueueCmdBlk(&p->RIOHosts[SpecialRupCmd.Host], SpecialRupCmd.RupNum, CmdBlkP) == RIO_FAIL) { | 224 | if (RIOQueueCmdBlk(&p->RIOHosts[SpecialRupCmd.Host], SpecialRupCmd.RupNum, CmdBlkP) == RIO_FAIL) { |
305 | cprintf("FAILED TO QUEUE SPECIAL RUP COMMAND\n"); | 225 | printk(KERN_WARNING "rio: FAILED TO QUEUE SPECIAL RUP COMMAND\n"); |
306 | } | 226 | } |
307 | return 0; | 227 | return 0; |
308 | } | 228 | } |
@@ -324,7 +244,7 @@ int su; | |||
324 | if ((retval = RIOApel(p)) != 0) | 244 | if ((retval = RIOApel(p)) != 0) |
325 | return retval; | 245 | return retval; |
326 | 246 | ||
327 | if (copyout((caddr_t) p->RIOConnectTable, (int) arg, TOTAL_MAP_ENTRIES * sizeof(struct Map)) == COPYFAIL) { | 247 | if (copy_to_user(arg, p->RIOConnectTable, TOTAL_MAP_ENTRIES * sizeof(struct Map))) { |
328 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_TABLE copy failed\n"); | 248 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_TABLE copy failed\n"); |
329 | p->RIOError.Error = COPYOUT_FAILED; | 249 | p->RIOError.Error = COPYOUT_FAILED; |
330 | return -EFAULT; | 250 | return -EFAULT; |
@@ -369,7 +289,7 @@ int su; | |||
369 | p->RIOError.Error = NOT_SUPER_USER; | 289 | p->RIOError.Error = NOT_SUPER_USER; |
370 | return -EPERM; | 290 | return -EPERM; |
371 | } | 291 | } |
372 | if (copyin((int) arg, (caddr_t) & p->RIOConnectTable[0], TOTAL_MAP_ENTRIES * sizeof(struct Map)) == COPYFAIL) { | 292 | if (copy_from_user(&p->RIOConnectTable[0], arg, TOTAL_MAP_ENTRIES * sizeof(struct Map))) { |
373 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_TABLE copy failed\n"); | 293 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_TABLE copy failed\n"); |
374 | p->RIOError.Error = COPYIN_FAILED; | 294 | p->RIOError.Error = COPYIN_FAILED; |
375 | return -EFAULT; | 295 | return -EFAULT; |
@@ -415,7 +335,7 @@ int su; | |||
415 | p->RIOError.Error = NOT_SUPER_USER; | 335 | p->RIOError.Error = NOT_SUPER_USER; |
416 | return -EPERM; | 336 | return -EPERM; |
417 | } | 337 | } |
418 | if (copyout((caddr_t) p->RIOBindTab, (int) arg, (sizeof(ulong) * MAX_RTA_BINDINGS)) == COPYFAIL) { | 338 | if (copy_to_user(arg, p->RIOBindTab, (sizeof(ulong) * MAX_RTA_BINDINGS))) { |
419 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_BINDINGS copy failed\n"); | 339 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_BINDINGS copy failed\n"); |
420 | p->RIOError.Error = COPYOUT_FAILED; | 340 | p->RIOError.Error = COPYOUT_FAILED; |
421 | return -EFAULT; | 341 | return -EFAULT; |
@@ -434,7 +354,7 @@ int su; | |||
434 | p->RIOError.Error = NOT_SUPER_USER; | 354 | p->RIOError.Error = NOT_SUPER_USER; |
435 | return -EPERM; | 355 | return -EPERM; |
436 | } | 356 | } |
437 | if (copyin((int) arg, (caddr_t) & p->RIOBindTab[0], (sizeof(ulong) * MAX_RTA_BINDINGS)) == COPYFAIL) { | 357 | if (copy_from_user(&p->RIOBindTab[0], arg, (sizeof(ulong) * MAX_RTA_BINDINGS))) { |
438 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS copy failed\n"); | 358 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PUT_BINDINGS copy failed\n"); |
439 | p->RIOError.Error = COPYIN_FAILED; | 359 | p->RIOError.Error = COPYIN_FAILED; |
440 | return -EFAULT; | 360 | return -EFAULT; |
@@ -458,12 +378,12 @@ int su; | |||
458 | for (Entry = 0; Entry < MAX_RTA_BINDINGS; Entry++) { | 378 | for (Entry = 0; Entry < MAX_RTA_BINDINGS; Entry++) { |
459 | if ((EmptySlot == -1) && (p->RIOBindTab[Entry] == 0L)) | 379 | if ((EmptySlot == -1) && (p->RIOBindTab[Entry] == 0L)) |
460 | EmptySlot = Entry; | 380 | EmptySlot = Entry; |
461 | else if (p->RIOBindTab[Entry] == (int) arg) { | 381 | else if (p->RIOBindTab[Entry] == (long)arg) { |
462 | /* | 382 | /* |
463 | ** Already exists - delete | 383 | ** Already exists - delete |
464 | */ | 384 | */ |
465 | p->RIOBindTab[Entry] = 0L; | 385 | p->RIOBindTab[Entry] = 0L; |
466 | rio_dprintk(RIO_DEBUG_CTRL, "Removing Rta %x from p->RIOBindTab\n", (int) arg); | 386 | rio_dprintk(RIO_DEBUG_CTRL, "Removing Rta %ld from p->RIOBindTab\n", (unsigned long)arg); |
467 | return 0; | 387 | return 0; |
468 | } | 388 | } |
469 | } | 389 | } |
@@ -471,10 +391,10 @@ int su; | |||
471 | ** Dosen't exist - add | 391 | ** Dosen't exist - add |
472 | */ | 392 | */ |
473 | if (EmptySlot != -1) { | 393 | if (EmptySlot != -1) { |
474 | p->RIOBindTab[EmptySlot] = (int) arg; | 394 | p->RIOBindTab[EmptySlot] = (unsigned long)arg; |
475 | rio_dprintk(RIO_DEBUG_CTRL, "Adding Rta %x to p->RIOBindTab\n", (int) arg); | 395 | rio_dprintk(RIO_DEBUG_CTRL, "Adding Rta %lx to p->RIOBindTab\n", (unsigned long) arg); |
476 | } else { | 396 | } else { |
477 | rio_dprintk(RIO_DEBUG_CTRL, "p->RIOBindTab full! - Rta %x not added\n", (int) arg); | 397 | rio_dprintk(RIO_DEBUG_CTRL, "p->RIOBindTab full! - Rta %lx not added\n", (unsigned long) arg); |
478 | return -ENOMEM; | 398 | return -ENOMEM; |
479 | } | 399 | } |
480 | return 0; | 400 | return 0; |
@@ -482,7 +402,7 @@ int su; | |||
482 | 402 | ||
483 | case RIO_RESUME: | 403 | case RIO_RESUME: |
484 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME\n"); | 404 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME\n"); |
485 | port = (uint) arg; | 405 | port = (unsigned long) arg; |
486 | if ((port < 0) || (port > 511)) { | 406 | if ((port < 0) || (port > 511)) { |
487 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Bad port number %d\n", port); | 407 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESUME: Bad port number %d\n", port); |
488 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 408 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
@@ -518,8 +438,7 @@ int su; | |||
518 | p->RIOError.Error = NOT_SUPER_USER; | 438 | p->RIOError.Error = NOT_SUPER_USER; |
519 | return -EPERM; | 439 | return -EPERM; |
520 | } | 440 | } |
521 | if (copyin((int) arg, (caddr_t) & MapEnt, sizeof(MapEnt)) | 441 | if (copy_from_user(&MapEnt, arg, sizeof(MapEnt))) { |
522 | == COPYFAIL) { | ||
523 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); | 442 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); |
524 | p->RIOError.Error = COPYIN_FAILED; | 443 | p->RIOError.Error = COPYIN_FAILED; |
525 | return -EFAULT; | 444 | return -EFAULT; |
@@ -533,8 +452,7 @@ int su; | |||
533 | p->RIOError.Error = NOT_SUPER_USER; | 452 | p->RIOError.Error = NOT_SUPER_USER; |
534 | return -EPERM; | 453 | return -EPERM; |
535 | } | 454 | } |
536 | if (copyin((int) arg, (caddr_t) & MapEnt, sizeof(MapEnt)) | 455 | if (copy_from_user(&MapEnt, arg, sizeof(MapEnt))) { |
537 | == COPYFAIL) { | ||
538 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); | 456 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from user space failed\n"); |
539 | p->RIOError.Error = COPYIN_FAILED; | 457 | p->RIOError.Error = COPYIN_FAILED; |
540 | return -EFAULT; | 458 | return -EFAULT; |
@@ -548,8 +466,7 @@ int su; | |||
548 | p->RIOError.Error = NOT_SUPER_USER; | 466 | p->RIOError.Error = NOT_SUPER_USER; |
549 | return -EPERM; | 467 | return -EPERM; |
550 | } | 468 | } |
551 | if (copyin((int) arg, (caddr_t) & MapEnt, sizeof(MapEnt)) | 469 | if (copy_from_user(&MapEnt, arg, sizeof(MapEnt))) { |
552 | == COPYFAIL) { | ||
553 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from data space failed\n"); | 470 | rio_dprintk(RIO_DEBUG_CTRL, "Copy from data space failed\n"); |
554 | p->RIOError.Error = COPYIN_FAILED; | 471 | p->RIOError.Error = COPYIN_FAILED; |
555 | return -EFAULT; | 472 | return -EFAULT; |
@@ -557,30 +474,14 @@ int su; | |||
557 | return RIODeleteRta(p, &MapEnt); | 474 | return RIODeleteRta(p, &MapEnt); |
558 | 475 | ||
559 | case RIO_QUICK_CHECK: | 476 | case RIO_QUICK_CHECK: |
560 | /* | 477 | if (copy_to_user(arg, &p->RIORtaDisCons, sizeof(unsigned int))) { |
561 | ** 09.12.1998 ARG - ESIL 0776 part fix | ||
562 | ** A customer was using this to get the RTAs | ||
563 | ** connect/disconnect status. | ||
564 | ** RIOConCon() had been botched use RIOHalted | ||
565 | ** to keep track of RTA connections and | ||
566 | ** disconnections. That has been changed and | ||
567 | ** RIORtaDisCons in the rio_info struct now | ||
568 | ** does the job. So we need to return the value | ||
569 | ** of RIORtaCons instead of RIOHalted. | ||
570 | ** | ||
571 | if (copyout((caddr_t)&p->RIOHalted,(int)arg, | ||
572 | sizeof(uint))==COPYFAIL) { | ||
573 | ** | ||
574 | */ | ||
575 | |||
576 | if (copyout((caddr_t) & p->RIORtaDisCons, (int) arg, sizeof(uint)) == COPYFAIL) { | ||
577 | p->RIOError.Error = COPYOUT_FAILED; | 478 | p->RIOError.Error = COPYOUT_FAILED; |
578 | return -EFAULT; | 479 | return -EFAULT; |
579 | } | 480 | } |
580 | return 0; | 481 | return 0; |
581 | 482 | ||
582 | case RIO_LAST_ERROR: | 483 | case RIO_LAST_ERROR: |
583 | if (copyout((caddr_t) & p->RIOError, (int) arg, sizeof(struct Error)) == COPYFAIL) | 484 | if (copy_to_user(arg, &p->RIOError, sizeof(struct Error))) |
584 | return -EFAULT; | 485 | return -EFAULT; |
585 | return 0; | 486 | return 0; |
586 | 487 | ||
@@ -589,7 +490,7 @@ int su; | |||
589 | return -EINVAL; | 490 | return -EINVAL; |
590 | 491 | ||
591 | case RIO_GET_MODTYPE: | 492 | case RIO_GET_MODTYPE: |
592 | if (copyin((int) arg, (caddr_t) & port, sizeof(uint)) == COPYFAIL) { | 493 | if (copy_from_user(&port, arg, sizeof(unsigned int))) { |
593 | p->RIOError.Error = COPYIN_FAILED; | 494 | p->RIOError.Error = COPYIN_FAILED; |
594 | return -EFAULT; | 495 | return -EFAULT; |
595 | } | 496 | } |
@@ -609,36 +510,11 @@ int su; | |||
609 | ** Return module type of port | 510 | ** Return module type of port |
610 | */ | 511 | */ |
611 | port = PortP->HostP->UnixRups[PortP->RupNum].ModTypes; | 512 | port = PortP->HostP->UnixRups[PortP->RupNum].ModTypes; |
612 | if (copyout((caddr_t) & port, (int) arg, sizeof(uint)) == COPYFAIL) { | 513 | if (copy_to_user(arg, &port, sizeof(unsigned int))) { |
613 | p->RIOError.Error = COPYOUT_FAILED; | 514 | p->RIOError.Error = COPYOUT_FAILED; |
614 | return -EFAULT; | 515 | return -EFAULT; |
615 | } | 516 | } |
616 | return (0); | 517 | return (0); |
617 | /* | ||
618 | ** 02.03.1999 ARG - ESIL 0820 fix | ||
619 | ** We are no longer using "Boot Mode", so these ioctls | ||
620 | ** are not required : | ||
621 | ** | ||
622 | case RIO_GET_BOOT_MODE : | ||
623 | rio_dprint(RIO_DEBUG_CTRL, ("Get boot mode - %x\n", p->RIOBootMode)); | ||
624 | ** | ||
625 | ** Return boot state of system - BOOT_ALL, BOOT_OWN or BOOT_NONE | ||
626 | ** | ||
627 | if (copyout((caddr_t)&p->RIOBootMode, (int)arg, | ||
628 | sizeof(p->RIOBootMode)) == COPYFAIL) { | ||
629 | p->RIOError.Error = COPYOUT_FAILED; | ||
630 | return -EFAULT; | ||
631 | } | ||
632 | return(0); | ||
633 | |||
634 | case RIO_SET_BOOT_MODE : | ||
635 | p->RIOBootMode = (uint) arg; | ||
636 | rio_dprint(RIO_DEBUG_CTRL, ("Set boot mode to 0x%x\n", p->RIOBootMode)); | ||
637 | return(0); | ||
638 | ** | ||
639 | ** End ESIL 0820 fix | ||
640 | */ | ||
641 | |||
642 | case RIO_BLOCK_OPENS: | 518 | case RIO_BLOCK_OPENS: |
643 | rio_dprintk(RIO_DEBUG_CTRL, "Opens block until booted\n"); | 519 | rio_dprintk(RIO_DEBUG_CTRL, "Opens block until booted\n"); |
644 | for (Entry = 0; Entry < RIO_PORTS; Entry++) { | 520 | for (Entry = 0; Entry < RIO_PORTS; Entry++) { |
@@ -650,8 +526,7 @@ int su; | |||
650 | 526 | ||
651 | case RIO_SETUP_PORTS: | 527 | case RIO_SETUP_PORTS: |
652 | rio_dprintk(RIO_DEBUG_CTRL, "Setup ports\n"); | 528 | rio_dprintk(RIO_DEBUG_CTRL, "Setup ports\n"); |
653 | if (copyin((int) arg, (caddr_t) & PortSetup, sizeof(PortSetup)) | 529 | if (copy_from_user(&PortSetup, arg, sizeof(PortSetup))) { |
654 | == COPYFAIL) { | ||
655 | p->RIOError.Error = COPYIN_FAILED; | 530 | p->RIOError.Error = COPYIN_FAILED; |
656 | rio_dprintk(RIO_DEBUG_CTRL, "EFAULT"); | 531 | rio_dprintk(RIO_DEBUG_CTRL, "EFAULT"); |
657 | return -EFAULT; | 532 | return -EFAULT; |
@@ -667,7 +542,7 @@ int su; | |||
667 | return -EINVAL; | 542 | return -EINVAL; |
668 | } | 543 | } |
669 | if (!p->RIOPortp) { | 544 | if (!p->RIOPortp) { |
670 | cprintf("No p->RIOPortp array!\n"); | 545 | printk(KERN_ERR "rio: No p->RIOPortp array!\n"); |
671 | rio_dprintk(RIO_DEBUG_CTRL, "No p->RIOPortp array!\n"); | 546 | rio_dprintk(RIO_DEBUG_CTRL, "No p->RIOPortp array!\n"); |
672 | return -EIO; | 547 | return -EIO; |
673 | } | 548 | } |
@@ -681,8 +556,7 @@ int su; | |||
681 | 556 | ||
682 | case RIO_GET_PORT_SETUP: | 557 | case RIO_GET_PORT_SETUP: |
683 | rio_dprintk(RIO_DEBUG_CTRL, "Get port setup\n"); | 558 | rio_dprintk(RIO_DEBUG_CTRL, "Get port setup\n"); |
684 | if (copyin((int) arg, (caddr_t) & PortSetup, sizeof(PortSetup)) | 559 | if (copy_from_user(&PortSetup, arg, sizeof(PortSetup))) { |
685 | == COPYFAIL) { | ||
686 | p->RIOError.Error = COPYIN_FAILED; | 560 | p->RIOError.Error = COPYIN_FAILED; |
687 | return -EFAULT; | 561 | return -EFAULT; |
688 | } | 562 | } |
@@ -703,8 +577,7 @@ int su; | |||
703 | PortSetup.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; | 577 | PortSetup.XpOn[MAX_XP_CTRL_LEN - 1] = '\0'; |
704 | PortSetup.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; | 578 | PortSetup.XpOff[MAX_XP_CTRL_LEN - 1] = '\0'; |
705 | 579 | ||
706 | if (copyout((caddr_t) & PortSetup, (int) arg, sizeof(PortSetup)) | 580 | if (copy_to_user(arg, &PortSetup, sizeof(PortSetup))) { |
707 | == COPYFAIL) { | ||
708 | p->RIOError.Error = COPYOUT_FAILED; | 581 | p->RIOError.Error = COPYOUT_FAILED; |
709 | return -EFAULT; | 582 | return -EFAULT; |
710 | } | 583 | } |
@@ -712,7 +585,7 @@ int su; | |||
712 | 585 | ||
713 | case RIO_GET_PORT_PARAMS: | 586 | case RIO_GET_PORT_PARAMS: |
714 | rio_dprintk(RIO_DEBUG_CTRL, "Get port params\n"); | 587 | rio_dprintk(RIO_DEBUG_CTRL, "Get port params\n"); |
715 | if (copyin((int) arg, (caddr_t) & PortParams, sizeof(struct PortParams)) == COPYFAIL) { | 588 | if (copy_from_user(&PortParams, arg, sizeof(struct PortParams))) { |
716 | p->RIOError.Error = COPYIN_FAILED; | 589 | p->RIOError.Error = COPYIN_FAILED; |
717 | return -EFAULT; | 590 | return -EFAULT; |
718 | } | 591 | } |
@@ -725,7 +598,7 @@ int su; | |||
725 | PortParams.State = PortP->State; | 598 | PortParams.State = PortP->State; |
726 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortParams.Port); | 599 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortParams.Port); |
727 | 600 | ||
728 | if (copyout((caddr_t) & PortParams, (int) arg, sizeof(struct PortParams)) == COPYFAIL) { | 601 | if (copy_to_user(arg, &PortParams, sizeof(struct PortParams))) { |
729 | p->RIOError.Error = COPYOUT_FAILED; | 602 | p->RIOError.Error = COPYOUT_FAILED; |
730 | return -EFAULT; | 603 | return -EFAULT; |
731 | } | 604 | } |
@@ -733,8 +606,7 @@ int su; | |||
733 | 606 | ||
734 | case RIO_GET_PORT_TTY: | 607 | case RIO_GET_PORT_TTY: |
735 | rio_dprintk(RIO_DEBUG_CTRL, "Get port tty\n"); | 608 | rio_dprintk(RIO_DEBUG_CTRL, "Get port tty\n"); |
736 | if (copyin((int) arg, (caddr_t) & PortTty, sizeof(struct PortTty)) | 609 | if (copy_from_user(&PortTty, arg, sizeof(struct PortTty))) { |
737 | == COPYFAIL) { | ||
738 | p->RIOError.Error = COPYIN_FAILED; | 610 | p->RIOError.Error = COPYIN_FAILED; |
739 | return -EFAULT; | 611 | return -EFAULT; |
740 | } | 612 | } |
@@ -745,14 +617,14 @@ int su; | |||
745 | 617 | ||
746 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortTty.port); | 618 | rio_dprintk(RIO_DEBUG_CTRL, "Port %d\n", PortTty.port); |
747 | PortP = (p->RIOPortp[PortTty.port]); | 619 | PortP = (p->RIOPortp[PortTty.port]); |
748 | if (copyout((caddr_t) & PortTty, (int) arg, sizeof(struct PortTty)) == COPYFAIL) { | 620 | if (copy_to_user(arg, &PortTty, sizeof(struct PortTty))) { |
749 | p->RIOError.Error = COPYOUT_FAILED; | 621 | p->RIOError.Error = COPYOUT_FAILED; |
750 | return -EFAULT; | 622 | return -EFAULT; |
751 | } | 623 | } |
752 | return retval; | 624 | return retval; |
753 | 625 | ||
754 | case RIO_SET_PORT_TTY: | 626 | case RIO_SET_PORT_TTY: |
755 | if (copyin((int) arg, (caddr_t) & PortTty, sizeof(struct PortTty)) == COPYFAIL) { | 627 | if (copy_from_user(&PortTty, arg, sizeof(struct PortTty))) { |
756 | p->RIOError.Error = COPYIN_FAILED; | 628 | p->RIOError.Error = COPYIN_FAILED; |
757 | return -EFAULT; | 629 | return -EFAULT; |
758 | } | 630 | } |
@@ -767,8 +639,7 @@ int su; | |||
767 | 639 | ||
768 | case RIO_SET_PORT_PARAMS: | 640 | case RIO_SET_PORT_PARAMS: |
769 | rio_dprintk(RIO_DEBUG_CTRL, "Set port params\n"); | 641 | rio_dprintk(RIO_DEBUG_CTRL, "Set port params\n"); |
770 | if (copyin((int) arg, (caddr_t) & PortParams, sizeof(PortParams)) | 642 | if (copy_from_user(&PortParams, arg, sizeof(PortParams))) { |
771 | == COPYFAIL) { | ||
772 | p->RIOError.Error = COPYIN_FAILED; | 643 | p->RIOError.Error = COPYIN_FAILED; |
773 | return -EFAULT; | 644 | return -EFAULT; |
774 | } | 645 | } |
@@ -784,7 +655,7 @@ int su; | |||
784 | 655 | ||
785 | case RIO_GET_PORT_STATS: | 656 | case RIO_GET_PORT_STATS: |
786 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_PORT_STATS\n"); | 657 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GET_PORT_STATS\n"); |
787 | if (copyin((int) arg, (caddr_t) & portStats, sizeof(struct portStats)) == COPYFAIL) { | 658 | if (copy_from_user(&portStats, arg, sizeof(struct portStats))) { |
788 | p->RIOError.Error = COPYIN_FAILED; | 659 | p->RIOError.Error = COPYIN_FAILED; |
789 | return -EFAULT; | 660 | return -EFAULT; |
790 | } | 661 | } |
@@ -799,14 +670,14 @@ int su; | |||
799 | portStats.opens = PortP->opens; | 670 | portStats.opens = PortP->opens; |
800 | portStats.closes = PortP->closes; | 671 | portStats.closes = PortP->closes; |
801 | portStats.ioctls = PortP->ioctls; | 672 | portStats.ioctls = PortP->ioctls; |
802 | if (copyout((caddr_t) & portStats, (int) arg, sizeof(struct portStats)) == COPYFAIL) { | 673 | if (copy_to_user(arg, &portStats, sizeof(struct portStats))) { |
803 | p->RIOError.Error = COPYOUT_FAILED; | 674 | p->RIOError.Error = COPYOUT_FAILED; |
804 | return -EFAULT; | 675 | return -EFAULT; |
805 | } | 676 | } |
806 | return retval; | 677 | return retval; |
807 | 678 | ||
808 | case RIO_RESET_PORT_STATS: | 679 | case RIO_RESET_PORT_STATS: |
809 | port = (uint) arg; | 680 | port = (unsigned long) arg; |
810 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESET_PORT_STATS\n"); | 681 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_RESET_PORT_STATS\n"); |
811 | if (port >= RIO_PORTS) { | 682 | if (port >= RIO_PORTS) { |
812 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 683 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
@@ -824,7 +695,7 @@ int su; | |||
824 | 695 | ||
825 | case RIO_GATHER_PORT_STATS: | 696 | case RIO_GATHER_PORT_STATS: |
826 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GATHER_PORT_STATS\n"); | 697 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GATHER_PORT_STATS\n"); |
827 | if (copyin((int) arg, (caddr_t) & portStats, sizeof(struct portStats)) == COPYFAIL) { | 698 | if (copy_from_user(&portStats, arg, sizeof(struct portStats))) { |
828 | p->RIOError.Error = COPYIN_FAILED; | 699 | p->RIOError.Error = COPYIN_FAILED; |
829 | return -EFAULT; | 700 | return -EFAULT; |
830 | } | 701 | } |
@@ -840,7 +711,7 @@ int su; | |||
840 | 711 | ||
841 | case RIO_READ_CONFIG: | 712 | case RIO_READ_CONFIG: |
842 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_CONFIG\n"); | 713 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_CONFIG\n"); |
843 | if (copyout((caddr_t) & p->RIOConf, (int) arg, sizeof(struct Conf)) == COPYFAIL) { | 714 | if (copy_to_user(arg, &p->RIOConf, sizeof(struct Conf))) { |
844 | p->RIOError.Error = COPYOUT_FAILED; | 715 | p->RIOError.Error = COPYOUT_FAILED; |
845 | return -EFAULT; | 716 | return -EFAULT; |
846 | } | 717 | } |
@@ -852,8 +723,7 @@ int su; | |||
852 | p->RIOError.Error = NOT_SUPER_USER; | 723 | p->RIOError.Error = NOT_SUPER_USER; |
853 | return -EPERM; | 724 | return -EPERM; |
854 | } | 725 | } |
855 | if (copyin((int) arg, (caddr_t) & p->RIOConf, sizeof(struct Conf)) | 726 | if (copy_from_user(&p->RIOConf, arg, sizeof(struct Conf))) { |
856 | == COPYFAIL) { | ||
857 | p->RIOError.Error = COPYIN_FAILED; | 727 | p->RIOError.Error = COPYIN_FAILED; |
858 | return -EFAULT; | 728 | return -EFAULT; |
859 | } | 729 | } |
@@ -862,7 +732,7 @@ int su; | |||
862 | */ | 732 | */ |
863 | for (Host = 0; Host < p->RIONumHosts; Host++) | 733 | for (Host = 0; Host < p->RIONumHosts; Host++) |
864 | if ((p->RIOHosts[Host].Flags & RUN_STATE) == RC_RUNNING) | 734 | if ((p->RIOHosts[Host].Flags & RUN_STATE) == RC_RUNNING) |
865 | WWORD(p->RIOHosts[Host].ParmMapP->timer, p->RIOConf.Timer); | 735 | writew(p->RIOConf.Timer, &p->RIOHosts[Host].ParmMapP->timer); |
866 | return retval; | 736 | return retval; |
867 | 737 | ||
868 | case RIO_START_POLLER: | 738 | case RIO_START_POLLER: |
@@ -881,8 +751,7 @@ int su; | |||
881 | case RIO_SETDEBUG: | 751 | case RIO_SETDEBUG: |
882 | case RIO_GETDEBUG: | 752 | case RIO_GETDEBUG: |
883 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SETDEBUG/RIO_GETDEBUG\n"); | 753 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SETDEBUG/RIO_GETDEBUG\n"); |
884 | if (copyin((int) arg, (caddr_t) & DebugCtrl, sizeof(DebugCtrl)) | 754 | if (copy_from_user(&DebugCtrl, arg, sizeof(DebugCtrl))) { |
885 | == COPYFAIL) { | ||
886 | p->RIOError.Error = COPYIN_FAILED; | 755 | p->RIOError.Error = COPYIN_FAILED; |
887 | return -EFAULT; | 756 | return -EFAULT; |
888 | } | 757 | } |
@@ -899,7 +768,7 @@ int su; | |||
899 | rio_dprintk(RIO_DEBUG_CTRL, "Get global debug 0x%x wait 0x%x\n", p->rio_debug, p->RIODebugWait); | 768 | rio_dprintk(RIO_DEBUG_CTRL, "Get global debug 0x%x wait 0x%x\n", p->rio_debug, p->RIODebugWait); |
900 | DebugCtrl.Debug = p->rio_debug; | 769 | DebugCtrl.Debug = p->rio_debug; |
901 | DebugCtrl.Wait = p->RIODebugWait; | 770 | DebugCtrl.Wait = p->RIODebugWait; |
902 | if (copyout((caddr_t) & DebugCtrl, (int) arg, sizeof(DebugCtrl)) == COPYFAIL) { | 771 | if (copy_to_user(arg, &DebugCtrl, sizeof(DebugCtrl))) { |
903 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", DebugCtrl.SysPort); | 772 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET/GET DEBUG: bad port number %d\n", DebugCtrl.SysPort); |
904 | p->RIOError.Error = COPYOUT_FAILED; | 773 | p->RIOError.Error = COPYOUT_FAILED; |
905 | return -EFAULT; | 774 | return -EFAULT; |
@@ -921,7 +790,7 @@ int su; | |||
921 | } else { | 790 | } else { |
922 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG 0x%x\n", p->RIOPortp[DebugCtrl.SysPort]->Debug); | 791 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG 0x%x\n", p->RIOPortp[DebugCtrl.SysPort]->Debug); |
923 | DebugCtrl.Debug = p->RIOPortp[DebugCtrl.SysPort]->Debug; | 792 | DebugCtrl.Debug = p->RIOPortp[DebugCtrl.SysPort]->Debug; |
924 | if (copyout((caddr_t) & DebugCtrl, (int) arg, sizeof(DebugCtrl)) == COPYFAIL) { | 793 | if (copy_to_user(arg, &DebugCtrl, sizeof(DebugCtrl))) { |
925 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG: Bad copy to user space\n"); | 794 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_GETDEBUG: Bad copy to user space\n"); |
926 | p->RIOError.Error = COPYOUT_FAILED; | 795 | p->RIOError.Error = COPYOUT_FAILED; |
927 | return -EFAULT; | 796 | return -EFAULT; |
@@ -936,43 +805,20 @@ int su; | |||
936 | ** textual null terminated string. | 805 | ** textual null terminated string. |
937 | */ | 806 | */ |
938 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID\n"); | 807 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID\n"); |
939 | if (copyout((caddr_t) RIOVersid(), (int) arg, sizeof(struct rioVersion)) == COPYFAIL) { | 808 | if (copy_to_user(arg, RIOVersid(), sizeof(struct rioVersion))) { |
940 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID: Bad copy to user space (host=%d)\n", Host); | 809 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_VERSID: Bad copy to user space (host=%d)\n", Host); |
941 | p->RIOError.Error = COPYOUT_FAILED; | 810 | p->RIOError.Error = COPYOUT_FAILED; |
942 | return -EFAULT; | 811 | return -EFAULT; |
943 | } | 812 | } |
944 | return retval; | 813 | return retval; |
945 | 814 | ||
946 | /* | ||
947 | ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
948 | ** !! commented out previous 'RIO_VERSID' functionality !! | ||
949 | ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
950 | ** | ||
951 | case RIO_VERSID: | ||
952 | ** | ||
953 | ** Enquire about the release and version. | ||
954 | ** We return MAX_VERSION_LEN bytes, being a textual null | ||
955 | ** terminated string. | ||
956 | ** | ||
957 | rio_dprint(RIO_DEBUG_CTRL, ("RIO_VERSID\n")); | ||
958 | if (copyout((caddr_t)RIOVersid(), | ||
959 | (int)arg, MAX_VERSION_LEN ) == COPYFAIL ) { | ||
960 | rio_dprint(RIO_DEBUG_CTRL, ("RIO_VERSID: Bad copy to user space\n",Host)); | ||
961 | p->RIOError.Error = COPYOUT_FAILED; | ||
962 | return -EFAULT; | ||
963 | } | ||
964 | return retval; | ||
965 | ** | ||
966 | ** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
967 | */ | ||
968 | |||
969 | case RIO_NUM_HOSTS: | 815 | case RIO_NUM_HOSTS: |
970 | /* | 816 | /* |
971 | ** Enquire as to the number of hosts located | 817 | ** Enquire as to the number of hosts located |
972 | ** at init time. | 818 | ** at init time. |
973 | */ | 819 | */ |
974 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS\n"); | 820 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS\n"); |
975 | if (copyout((caddr_t) & p->RIONumHosts, (int) arg, sizeof(p->RIONumHosts)) == COPYFAIL) { | 821 | if (copy_to_user(arg, &p->RIONumHosts, sizeof(p->RIONumHosts))) { |
976 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS: Bad copy to user space\n"); | 822 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_NUM_HOSTS: Bad copy to user space\n"); |
977 | p->RIOError.Error = COPYOUT_FAILED; | 823 | p->RIOError.Error = COPYOUT_FAILED; |
978 | return -EFAULT; | 824 | return -EFAULT; |
@@ -983,7 +829,7 @@ int su; | |||
983 | /* | 829 | /* |
984 | ** Kill host. This may not be in the final version... | 830 | ** Kill host. This may not be in the final version... |
985 | */ | 831 | */ |
986 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD %d\n", (int) arg); | 832 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD %ld\n", (unsigned long) arg); |
987 | if (!su) { | 833 | if (!su) { |
988 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD: Not super user\n"); | 834 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_FOAD: Not super user\n"); |
989 | p->RIOError.Error = NOT_SUPER_USER; | 835 | p->RIOError.Error = NOT_SUPER_USER; |
@@ -994,7 +840,7 @@ int su; | |||
994 | 840 | ||
995 | for (Host = 0; Host < p->RIONumHosts; Host++) { | 841 | for (Host = 0; Host < p->RIONumHosts; Host++) { |
996 | (void) RIOBoardTest(p->RIOHosts[Host].PaddrP, p->RIOHosts[Host].Caddr, p->RIOHosts[Host].Type, p->RIOHosts[Host].Slot); | 842 | (void) RIOBoardTest(p->RIOHosts[Host].PaddrP, p->RIOHosts[Host].Caddr, p->RIOHosts[Host].Type, p->RIOHosts[Host].Slot); |
997 | bzero((caddr_t) & p->RIOHosts[Host].Flags, ((int) &p->RIOHosts[Host].____end_marker____) - ((int) &p->RIOHosts[Host].Flags)); | 843 | memset(&p->RIOHosts[Host].Flags, 0, ((char *) &p->RIOHosts[Host].____end_marker____) - ((char *) &p->RIOHosts[Host].Flags)); |
998 | p->RIOHosts[Host].Flags = RC_WAITING; | 844 | p->RIOHosts[Host].Flags = RC_WAITING; |
999 | } | 845 | } |
1000 | RIOFoadWakeup(p); | 846 | RIOFoadWakeup(p); |
@@ -1017,7 +863,7 @@ int su; | |||
1017 | p->RIOError.Error = NOT_SUPER_USER; | 863 | p->RIOError.Error = NOT_SUPER_USER; |
1018 | return -EPERM; | 864 | return -EPERM; |
1019 | } | 865 | } |
1020 | if (copyin((int) arg, (caddr_t) & DownLoad, sizeof(DownLoad)) == COPYFAIL) { | 866 | if (copy_from_user(&DownLoad, arg, sizeof(DownLoad))) { |
1021 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Copy in from user space failed\n"); | 867 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_DOWNLOAD: Copy in from user space failed\n"); |
1022 | p->RIOError.Error = COPYIN_FAILED; | 868 | p->RIOError.Error = COPYIN_FAILED; |
1023 | return -EFAULT; | 869 | return -EFAULT; |
@@ -1045,9 +891,9 @@ int su; | |||
1045 | 891 | ||
1046 | case RIO_PARMS: | 892 | case RIO_PARMS: |
1047 | { | 893 | { |
1048 | uint host; | 894 | unsigned int host; |
1049 | 895 | ||
1050 | if (copyin((int) arg, (caddr_t) & host, sizeof(host)) == COPYFAIL) { | 896 | if (copy_from_user(&host, arg, sizeof(host))) { |
1051 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); | 897 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); |
1052 | p->RIOError.Error = COPYIN_FAILED; | 898 | p->RIOError.Error = COPYIN_FAILED; |
1053 | return -EFAULT; | 899 | return -EFAULT; |
@@ -1056,7 +902,7 @@ int su; | |||
1056 | ** Fetch the parmmap | 902 | ** Fetch the parmmap |
1057 | */ | 903 | */ |
1058 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS\n"); | 904 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS\n"); |
1059 | if (copyout((caddr_t) p->RIOHosts[host].ParmMapP, (int) arg, sizeof(PARM_MAP)) == COPYFAIL) { | 905 | if (copy_to_user(arg, p->RIOHosts[host].ParmMapP, sizeof(PARM_MAP))) { |
1060 | p->RIOError.Error = COPYOUT_FAILED; | 906 | p->RIOError.Error = COPYOUT_FAILED; |
1061 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS: Copy out to user space failed\n"); | 907 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_PARMS: Copy out to user space failed\n"); |
1062 | return -EFAULT; | 908 | return -EFAULT; |
@@ -1066,7 +912,7 @@ int su; | |||
1066 | 912 | ||
1067 | case RIO_HOST_REQ: | 913 | case RIO_HOST_REQ: |
1068 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ\n"); | 914 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ\n"); |
1069 | if (copyin((int) arg, (caddr_t) & HostReq, sizeof(HostReq)) == COPYFAIL) { | 915 | if (copy_from_user(&HostReq, arg, sizeof(HostReq))) { |
1070 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); | 916 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Copy in from user space failed\n"); |
1071 | p->RIOError.Error = COPYIN_FAILED; | 917 | p->RIOError.Error = COPYIN_FAILED; |
1072 | return -EFAULT; | 918 | return -EFAULT; |
@@ -1078,7 +924,7 @@ int su; | |||
1078 | } | 924 | } |
1079 | rio_dprintk(RIO_DEBUG_CTRL, "Request for host %d\n", HostReq.HostNum); | 925 | rio_dprintk(RIO_DEBUG_CTRL, "Request for host %d\n", HostReq.HostNum); |
1080 | 926 | ||
1081 | if (copyout((caddr_t) & p->RIOHosts[HostReq.HostNum], (int) HostReq.HostP, sizeof(struct Host)) == COPYFAIL) { | 927 | if (copy_to_user(HostReq.HostP, &p->RIOHosts[HostReq.HostNum], sizeof(struct Host))) { |
1082 | p->RIOError.Error = COPYOUT_FAILED; | 928 | p->RIOError.Error = COPYOUT_FAILED; |
1083 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Bad copy to user space\n"); | 929 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_REQ: Bad copy to user space\n"); |
1084 | return -EFAULT; | 930 | return -EFAULT; |
@@ -1087,7 +933,7 @@ int su; | |||
1087 | 933 | ||
1088 | case RIO_HOST_DPRAM: | 934 | case RIO_HOST_DPRAM: |
1089 | rio_dprintk(RIO_DEBUG_CTRL, "Request for DPRAM\n"); | 935 | rio_dprintk(RIO_DEBUG_CTRL, "Request for DPRAM\n"); |
1090 | if (copyin((int) arg, (caddr_t) & HostDpRam, sizeof(HostDpRam)) == COPYFAIL) { | 936 | if (copy_from_user(&HostDpRam, arg, sizeof(HostDpRam))) { |
1091 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Copy in from user space failed\n"); | 937 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Copy in from user space failed\n"); |
1092 | p->RIOError.Error = COPYIN_FAILED; | 938 | p->RIOError.Error = COPYIN_FAILED; |
1093 | return -EFAULT; | 939 | return -EFAULT; |
@@ -1104,13 +950,13 @@ int su; | |||
1104 | /* It's hardware like this that really gets on my tits. */ | 950 | /* It's hardware like this that really gets on my tits. */ |
1105 | static unsigned char copy[sizeof(struct DpRam)]; | 951 | static unsigned char copy[sizeof(struct DpRam)]; |
1106 | for (off = 0; off < sizeof(struct DpRam); off++) | 952 | for (off = 0; off < sizeof(struct DpRam); off++) |
1107 | copy[off] = p->RIOHosts[HostDpRam.HostNum].Caddr[off]; | 953 | copy[off] = readb(&p->RIOHosts[HostDpRam.HostNum].Caddr[off]); |
1108 | if (copyout((caddr_t) copy, (int) HostDpRam.DpRamP, sizeof(struct DpRam)) == COPYFAIL) { | 954 | if (copy_to_user(HostDpRam.DpRamP, copy, sizeof(struct DpRam))) { |
1109 | p->RIOError.Error = COPYOUT_FAILED; | 955 | p->RIOError.Error = COPYOUT_FAILED; |
1110 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); | 956 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); |
1111 | return -EFAULT; | 957 | return -EFAULT; |
1112 | } | 958 | } |
1113 | } else if (copyout((caddr_t) p->RIOHosts[HostDpRam.HostNum].Caddr, (int) HostDpRam.DpRamP, sizeof(struct DpRam)) == COPYFAIL) { | 959 | } else if (copy_to_user(HostDpRam.DpRamP, p->RIOHosts[HostDpRam.HostNum].Caddr, sizeof(struct DpRam))) { |
1114 | p->RIOError.Error = COPYOUT_FAILED; | 960 | p->RIOError.Error = COPYOUT_FAILED; |
1115 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); | 961 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_DPRAM: Bad copy to user space\n"); |
1116 | return -EFAULT; | 962 | return -EFAULT; |
@@ -1119,13 +965,13 @@ int su; | |||
1119 | 965 | ||
1120 | case RIO_SET_BUSY: | 966 | case RIO_SET_BUSY: |
1121 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY\n"); | 967 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY\n"); |
1122 | if ((int) arg < 0 || (int) arg > 511) { | 968 | if ((unsigned long) arg > 511) { |
1123 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY: Bad port number %d\n", (int) arg); | 969 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SET_BUSY: Bad port number %ld\n", (unsigned long) arg); |
1124 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 970 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
1125 | return -EINVAL; | 971 | return -EINVAL; |
1126 | } | 972 | } |
1127 | rio_spin_lock_irqsave(&PortP->portSem, flags); | 973 | rio_spin_lock_irqsave(&PortP->portSem, flags); |
1128 | p->RIOPortp[(int) arg]->State |= RIO_BUSY; | 974 | p->RIOPortp[(unsigned long) arg]->State |= RIO_BUSY; |
1129 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); | 975 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); |
1130 | return retval; | 976 | return retval; |
1131 | 977 | ||
@@ -1135,7 +981,7 @@ int su; | |||
1135 | ** (probably for debug reasons) | 981 | ** (probably for debug reasons) |
1136 | */ | 982 | */ |
1137 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT\n"); | 983 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT\n"); |
1138 | if (copyin((int) arg, (caddr_t) & PortReq, sizeof(PortReq)) == COPYFAIL) { | 984 | if (copy_from_user(&PortReq, arg, sizeof(PortReq))) { |
1139 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Copy in from user space failed\n"); | 985 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Copy in from user space failed\n"); |
1140 | p->RIOError.Error = COPYIN_FAILED; | 986 | p->RIOError.Error = COPYIN_FAILED; |
1141 | return -EFAULT; | 987 | return -EFAULT; |
@@ -1147,7 +993,7 @@ int su; | |||
1147 | return -ENXIO; | 993 | return -ENXIO; |
1148 | } | 994 | } |
1149 | rio_dprintk(RIO_DEBUG_CTRL, "Request for port %d\n", PortReq.SysPort); | 995 | rio_dprintk(RIO_DEBUG_CTRL, "Request for port %d\n", PortReq.SysPort); |
1150 | if (copyout((caddr_t) p->RIOPortp[PortReq.SysPort], (int) PortReq.PortP, sizeof(struct Port)) == COPYFAIL) { | 996 | if (copy_to_user(PortReq.PortP, p->RIOPortp[PortReq.SysPort], sizeof(struct Port))) { |
1151 | p->RIOError.Error = COPYOUT_FAILED; | 997 | p->RIOError.Error = COPYOUT_FAILED; |
1152 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Bad copy to user space\n"); | 998 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_PORT: Bad copy to user space\n"); |
1153 | return -EFAULT; | 999 | return -EFAULT; |
@@ -1160,7 +1006,7 @@ int su; | |||
1160 | ** (probably for debug reasons) | 1006 | ** (probably for debug reasons) |
1161 | */ | 1007 | */ |
1162 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP\n"); | 1008 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP\n"); |
1163 | if (copyin((int) arg, (caddr_t) & RupReq, sizeof(RupReq)) == COPYFAIL) { | 1009 | if (copy_from_user(&RupReq, arg, sizeof(RupReq))) { |
1164 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Copy in from user space failed\n"); | 1010 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Copy in from user space failed\n"); |
1165 | p->RIOError.Error = COPYIN_FAILED; | 1011 | p->RIOError.Error = COPYIN_FAILED; |
1166 | return -EFAULT; | 1012 | return -EFAULT; |
@@ -1184,7 +1030,7 @@ int su; | |||
1184 | } | 1030 | } |
1185 | rio_dprintk(RIO_DEBUG_CTRL, "Request for rup %d from host %d\n", RupReq.RupNum, RupReq.HostNum); | 1031 | rio_dprintk(RIO_DEBUG_CTRL, "Request for rup %d from host %d\n", RupReq.RupNum, RupReq.HostNum); |
1186 | 1032 | ||
1187 | if (copyout((caddr_t) HostP->UnixRups[RupReq.RupNum].RupP, (int) RupReq.RupP, sizeof(struct RUP)) == COPYFAIL) { | 1033 | if (copy_to_user(HostP->UnixRups[RupReq.RupNum].RupP, RupReq.RupP, sizeof(struct RUP))) { |
1188 | p->RIOError.Error = COPYOUT_FAILED; | 1034 | p->RIOError.Error = COPYOUT_FAILED; |
1189 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Bad copy to user space\n"); | 1035 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_RUP: Bad copy to user space\n"); |
1190 | return -EFAULT; | 1036 | return -EFAULT; |
@@ -1197,7 +1043,7 @@ int su; | |||
1197 | ** (probably for debug reasons) | 1043 | ** (probably for debug reasons) |
1198 | */ | 1044 | */ |
1199 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB\n"); | 1045 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB\n"); |
1200 | if (copyin((int) arg, (caddr_t) & LpbReq, sizeof(LpbReq)) == COPYFAIL) { | 1046 | if (copy_from_user(&LpbReq, arg, sizeof(LpbReq))) { |
1201 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy from user space\n"); | 1047 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy from user space\n"); |
1202 | p->RIOError.Error = COPYIN_FAILED; | 1048 | p->RIOError.Error = COPYIN_FAILED; |
1203 | return -EFAULT; | 1049 | return -EFAULT; |
@@ -1221,7 +1067,7 @@ int su; | |||
1221 | } | 1067 | } |
1222 | rio_dprintk(RIO_DEBUG_CTRL, "Request for lpb %d from host %d\n", LpbReq.Link, LpbReq.Host); | 1068 | rio_dprintk(RIO_DEBUG_CTRL, "Request for lpb %d from host %d\n", LpbReq.Link, LpbReq.Host); |
1223 | 1069 | ||
1224 | if (copyout((caddr_t) & HostP->LinkStrP[LpbReq.Link], (int) LpbReq.LpbP, sizeof(struct LPB)) == COPYFAIL) { | 1070 | if (copy_to_user(LpbReq.LpbP, &HostP->LinkStrP[LpbReq.Link], sizeof(struct LPB))) { |
1225 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy to user space\n"); | 1071 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_HOST_LPB: Bad copy to user space\n"); |
1226 | p->RIOError.Error = COPYOUT_FAILED; | 1072 | p->RIOError.Error = COPYOUT_FAILED; |
1227 | return -EFAULT; | 1073 | return -EFAULT; |
@@ -1252,12 +1098,13 @@ int su; | |||
1252 | p->RIOError.Error = SIGNALS_ALREADY_SET; | 1098 | p->RIOError.Error = SIGNALS_ALREADY_SET; |
1253 | return -EBUSY; | 1099 | return -EBUSY; |
1254 | } | 1100 | } |
1255 | p->RIOSignalProcess = getpid(); | 1101 | /* FIXME: PID tracking */ |
1102 | p->RIOSignalProcess = current->pid; | ||
1256 | p->RIOPrintDisabled = DONT_PRINT; | 1103 | p->RIOPrintDisabled = DONT_PRINT; |
1257 | return retval; | 1104 | return retval; |
1258 | 1105 | ||
1259 | case RIO_SIGNALS_OFF: | 1106 | case RIO_SIGNALS_OFF: |
1260 | if (p->RIOSignalProcess != getpid()) { | 1107 | if (p->RIOSignalProcess != current->pid) { |
1261 | p->RIOError.Error = NOT_RECEIVING_PROCESS; | 1108 | p->RIOError.Error = NOT_RECEIVING_PROCESS; |
1262 | return -EPERM; | 1109 | return -EPERM; |
1263 | } | 1110 | } |
@@ -1294,7 +1141,7 @@ int su; | |||
1294 | case RIO_MAP_B110_TO_110: | 1141 | case RIO_MAP_B110_TO_110: |
1295 | case RIO_MAP_B110_TO_115200: | 1142 | case RIO_MAP_B110_TO_115200: |
1296 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping\n"); | 1143 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping\n"); |
1297 | port = (uint) arg; | 1144 | port = (unsigned long) arg; |
1298 | if (port < 0 || port > 511) { | 1145 | if (port < 0 || port > 511) { |
1299 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", port); | 1146 | rio_dprintk(RIO_DEBUG_CTRL, "Baud rate mapping: Bad port number %d\n", port); |
1300 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; | 1147 | p->RIOError.Error = PORT_NUMBER_OUT_OF_RANGE; |
@@ -1324,7 +1171,7 @@ int su; | |||
1324 | 1171 | ||
1325 | case RIO_SEND_PACKET: | 1172 | case RIO_SEND_PACKET: |
1326 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET\n"); | 1173 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET\n"); |
1327 | if (copyin((int) arg, (caddr_t) & SendPack, sizeof(SendPack)) == COPYFAIL) { | 1174 | if (copy_from_user(&SendPack, arg, sizeof(SendPack))) { |
1328 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET: Bad copy from user space\n"); | 1175 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_SEND_PACKET: Bad copy from user space\n"); |
1329 | p->RIOError.Error = COPYIN_FAILED; | 1176 | p->RIOError.Error = COPYIN_FAILED; |
1330 | return -EFAULT; | 1177 | return -EFAULT; |
@@ -1344,9 +1191,9 @@ int su; | |||
1344 | } | 1191 | } |
1345 | 1192 | ||
1346 | for (loop = 0; loop < (ushort) (SendPack.Len & 127); loop++) | 1193 | for (loop = 0; loop < (ushort) (SendPack.Len & 127); loop++) |
1347 | WBYTE(PacketP->data[loop], SendPack.Data[loop]); | 1194 | writeb(SendPack.Data[loop], &PacketP->data[loop]); |
1348 | 1195 | ||
1349 | WBYTE(PacketP->len, SendPack.Len); | 1196 | writeb(SendPack.Len, &PacketP->len); |
1350 | 1197 | ||
1351 | add_transmit(PortP); | 1198 | add_transmit(PortP); |
1352 | /* | 1199 | /* |
@@ -1368,7 +1215,7 @@ int su; | |||
1368 | return su ? 0 : -EPERM; | 1215 | return su ? 0 : -EPERM; |
1369 | 1216 | ||
1370 | case RIO_WHAT_MESG: | 1217 | case RIO_WHAT_MESG: |
1371 | if (copyout((caddr_t) & p->RIONoMessage, (int) arg, sizeof(p->RIONoMessage)) == COPYFAIL) { | 1218 | if (copy_to_user(arg, &p->RIONoMessage, sizeof(p->RIONoMessage))) { |
1372 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_WHAT_MESG: Bad copy to user space\n"); | 1219 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_WHAT_MESG: Bad copy to user space\n"); |
1373 | p->RIOError.Error = COPYOUT_FAILED; | 1220 | p->RIOError.Error = COPYOUT_FAILED; |
1374 | return -EFAULT; | 1221 | return -EFAULT; |
@@ -1376,7 +1223,7 @@ int su; | |||
1376 | return 0; | 1223 | return 0; |
1377 | 1224 | ||
1378 | case RIO_MEM_DUMP: | 1225 | case RIO_MEM_DUMP: |
1379 | if (copyin((int) arg, (caddr_t) & SubCmd, sizeof(struct SubCmdStruct)) == COPYFAIL) { | 1226 | if (copy_from_user(&SubCmd, arg, sizeof(struct SubCmdStruct))) { |
1380 | p->RIOError.Error = COPYIN_FAILED; | 1227 | p->RIOError.Error = COPYIN_FAILED; |
1381 | return -EFAULT; | 1228 | return -EFAULT; |
1382 | } | 1229 | } |
@@ -1406,7 +1253,7 @@ int su; | |||
1406 | PortP->State |= RIO_BUSY; | 1253 | PortP->State |= RIO_BUSY; |
1407 | 1254 | ||
1408 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); | 1255 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); |
1409 | if (copyout((caddr_t) p->RIOMemDump, (int) arg, MEMDUMP_SIZE) == COPYFAIL) { | 1256 | if (copy_to_user(arg, p->RIOMemDump, MEMDUMP_SIZE)) { |
1410 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_MEM_DUMP copy failed\n"); | 1257 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_MEM_DUMP copy failed\n"); |
1411 | p->RIOError.Error = COPYOUT_FAILED; | 1258 | p->RIOError.Error = COPYOUT_FAILED; |
1412 | return -EFAULT; | 1259 | return -EFAULT; |
@@ -1414,30 +1261,30 @@ int su; | |||
1414 | return 0; | 1261 | return 0; |
1415 | 1262 | ||
1416 | case RIO_TICK: | 1263 | case RIO_TICK: |
1417 | if ((int) arg < 0 || (int) arg >= p->RIONumHosts) | 1264 | if ((unsigned long) arg >= p->RIONumHosts) |
1418 | return -EINVAL; | 1265 | return -EINVAL; |
1419 | rio_dprintk(RIO_DEBUG_CTRL, "Set interrupt for host %d\n", (int) arg); | 1266 | rio_dprintk(RIO_DEBUG_CTRL, "Set interrupt for host %ld\n", (unsigned long) arg); |
1420 | WBYTE(p->RIOHosts[(int) arg].SetInt, 0xff); | 1267 | writeb(0xFF, &p->RIOHosts[(unsigned long) arg].SetInt); |
1421 | return 0; | 1268 | return 0; |
1422 | 1269 | ||
1423 | case RIO_TOCK: | 1270 | case RIO_TOCK: |
1424 | if ((int) arg < 0 || (int) arg >= p->RIONumHosts) | 1271 | if ((unsigned long) arg >= p->RIONumHosts) |
1425 | return -EINVAL; | 1272 | return -EINVAL; |
1426 | rio_dprintk(RIO_DEBUG_CTRL, "Clear interrupt for host %d\n", (int) arg); | 1273 | rio_dprintk(RIO_DEBUG_CTRL, "Clear interrupt for host %ld\n", (unsigned long) arg); |
1427 | WBYTE((p->RIOHosts[(int) arg].ResetInt), 0xff); | 1274 | writeb(0xFF, &p->RIOHosts[(unsigned long) arg].ResetInt); |
1428 | return 0; | 1275 | return 0; |
1429 | 1276 | ||
1430 | case RIO_READ_CHECK: | 1277 | case RIO_READ_CHECK: |
1431 | /* Check reads for pkts with data[0] the same */ | 1278 | /* Check reads for pkts with data[0] the same */ |
1432 | p->RIOReadCheck = !p->RIOReadCheck; | 1279 | p->RIOReadCheck = !p->RIOReadCheck; |
1433 | if (copyout((caddr_t) & p->RIOReadCheck, (int) arg, sizeof(uint)) == COPYFAIL) { | 1280 | if (copy_to_user(arg, &p->RIOReadCheck, sizeof(unsigned int))) { |
1434 | p->RIOError.Error = COPYOUT_FAILED; | 1281 | p->RIOError.Error = COPYOUT_FAILED; |
1435 | return -EFAULT; | 1282 | return -EFAULT; |
1436 | } | 1283 | } |
1437 | return 0; | 1284 | return 0; |
1438 | 1285 | ||
1439 | case RIO_READ_REGISTER: | 1286 | case RIO_READ_REGISTER: |
1440 | if (copyin((int) arg, (caddr_t) & SubCmd, sizeof(struct SubCmdStruct)) == COPYFAIL) { | 1287 | if (copy_from_user(&SubCmd, arg, sizeof(struct SubCmdStruct))) { |
1441 | p->RIOError.Error = COPYIN_FAILED; | 1288 | p->RIOError.Error = COPYIN_FAILED; |
1442 | return -EFAULT; | 1289 | return -EFAULT; |
1443 | } | 1290 | } |
@@ -1472,7 +1319,7 @@ int su; | |||
1472 | PortP->State |= RIO_BUSY; | 1319 | PortP->State |= RIO_BUSY; |
1473 | 1320 | ||
1474 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); | 1321 | rio_spin_unlock_irqrestore(&PortP->portSem, flags); |
1475 | if (copyout((caddr_t) & p->CdRegister, (int) arg, sizeof(uint)) == COPYFAIL) { | 1322 | if (copy_to_user(arg, &p->CdRegister, sizeof(unsigned int))) { |
1476 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_REGISTER copy failed\n"); | 1323 | rio_dprintk(RIO_DEBUG_CTRL, "RIO_READ_REGISTER copy failed\n"); |
1477 | p->RIOError.Error = COPYOUT_FAILED; | 1324 | p->RIOError.Error = COPYOUT_FAILED; |
1478 | return -EFAULT; | 1325 | return -EFAULT; |
@@ -1485,21 +1332,22 @@ int su; | |||
1485 | */ | 1332 | */ |
1486 | case RIO_MAKE_DEV: | 1333 | case RIO_MAKE_DEV: |
1487 | { | 1334 | { |
1488 | uint port = (uint) arg & RIO_MODEM_MASK; | 1335 | unsigned int port = (unsigned long) arg & RIO_MODEM_MASK; |
1336 | unsigned int ret; | ||
1489 | 1337 | ||
1490 | switch ((uint) arg & RIO_DEV_MASK) { | 1338 | switch ((unsigned long) arg & RIO_DEV_MASK) { |
1491 | case RIO_DEV_DIRECT: | 1339 | case RIO_DEV_DIRECT: |
1492 | arg = (caddr_t) drv_makedev(MAJOR(dev), port); | 1340 | ret = drv_makedev(MAJOR(dev), port); |
1493 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev direct 0x%x is 0x%x\n", port, (int) arg); | 1341 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev direct 0x%x is 0x%x\n", port, ret); |
1494 | return (int) arg; | 1342 | return ret; |
1495 | case RIO_DEV_MODEM: | 1343 | case RIO_DEV_MODEM: |
1496 | arg = (caddr_t) drv_makedev(MAJOR(dev), (port | RIO_MODEM_BIT)); | 1344 | ret = drv_makedev(MAJOR(dev), (port | RIO_MODEM_BIT)); |
1497 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev modem 0x%x is 0x%x\n", port, (int) arg); | 1345 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev modem 0x%x is 0x%x\n", port, ret); |
1498 | return (int) arg; | 1346 | return ret; |
1499 | case RIO_DEV_XPRINT: | 1347 | case RIO_DEV_XPRINT: |
1500 | arg = (caddr_t) drv_makedev(MAJOR(dev), port); | 1348 | ret = drv_makedev(MAJOR(dev), port); |
1501 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev printer 0x%x is 0x%x\n", port, (int) arg); | 1349 | rio_dprintk(RIO_DEBUG_CTRL, "Makedev printer 0x%x is 0x%x\n", port, ret); |
1502 | return (int) arg; | 1350 | return ret; |
1503 | } | 1351 | } |
1504 | rio_dprintk(RIO_DEBUG_CTRL, "MAKE Device is called\n"); | 1352 | rio_dprintk(RIO_DEBUG_CTRL, "MAKE Device is called\n"); |
1505 | return -EINVAL; | 1353 | return -EINVAL; |
@@ -1513,18 +1361,19 @@ int su; | |||
1513 | { | 1361 | { |
1514 | dev_t dv; | 1362 | dev_t dv; |
1515 | int mino; | 1363 | int mino; |
1364 | unsigned long ret; | ||
1516 | 1365 | ||
1517 | dv = (dev_t) ((int) arg); | 1366 | dv = (dev_t) ((unsigned long) arg); |
1518 | mino = RIO_UNMODEM(dv); | 1367 | mino = RIO_UNMODEM(dv); |
1519 | 1368 | ||
1520 | if (RIO_ISMODEM(dv)) { | 1369 | if (RIO_ISMODEM(dv)) { |
1521 | rio_dprintk(RIO_DEBUG_CTRL, "Minor for device 0x%x: modem %d\n", dv, mino); | 1370 | rio_dprintk(RIO_DEBUG_CTRL, "Minor for device 0x%x: modem %d\n", dv, mino); |
1522 | arg = (caddr_t) (mino | RIO_DEV_MODEM); | 1371 | ret = mino | RIO_DEV_MODEM; |
1523 | } else { | 1372 | } else { |
1524 | rio_dprintk(RIO_DEBUG_CTRL, "Minor for device 0x%x: direct %d\n", dv, mino); | 1373 | rio_dprintk(RIO_DEBUG_CTRL, "Minor for device 0x%x: direct %d\n", dv, mino); |
1525 | arg = (caddr_t) (mino | RIO_DEV_DIRECT); | 1374 | ret = mino | RIO_DEV_DIRECT; |
1526 | } | 1375 | } |
1527 | return (int) arg; | 1376 | return ret; |
1528 | } | 1377 | } |
1529 | } | 1378 | } |
1530 | rio_dprintk(RIO_DEBUG_CTRL, "INVALID DAEMON IOCTL 0x%x\n", cmd); | 1379 | rio_dprintk(RIO_DEBUG_CTRL, "INVALID DAEMON IOCTL 0x%x\n", cmd); |
@@ -1537,10 +1386,7 @@ int su; | |||
1537 | /* | 1386 | /* |
1538 | ** Pre-emptive commands go on RUPs and are only one byte long. | 1387 | ** Pre-emptive commands go on RUPs and are only one byte long. |
1539 | */ | 1388 | */ |
1540 | int RIOPreemptiveCmd(p, PortP, Cmd) | 1389 | int RIOPreemptiveCmd(struct rio_info *p, struct Port *PortP, u8 Cmd) |
1541 | struct rio_info *p; | ||
1542 | struct Port *PortP; | ||
1543 | uchar Cmd; | ||
1544 | { | 1390 | { |
1545 | struct CmdBlk *CmdBlkP; | 1391 | struct CmdBlk *CmdBlkP; |
1546 | struct PktCmd_M *PktCmdP; | 1392 | struct PktCmd_M *PktCmdP; |
@@ -1558,7 +1404,7 @@ uchar Cmd; | |||
1558 | return RIO_FAIL; | 1404 | return RIO_FAIL; |
1559 | } | 1405 | } |
1560 | 1406 | ||
1561 | rio_dprintk(RIO_DEBUG_CTRL, "Command blk 0x%x - InUse now %d\n", (int) CmdBlkP, PortP->InUse); | 1407 | rio_dprintk(RIO_DEBUG_CTRL, "Command blk 0x%p - InUse now %d\n", CmdBlkP, PortP->InUse); |
1562 | 1408 | ||
1563 | PktCmdP = (struct PktCmd_M *) &CmdBlkP->Packet.data[0]; | 1409 | PktCmdP = (struct PktCmd_M *) &CmdBlkP->Packet.data[0]; |
1564 | 1410 | ||
@@ -1572,7 +1418,7 @@ uchar Cmd; | |||
1572 | CmdBlkP->Packet.dest_port = COMMAND_RUP; | 1418 | CmdBlkP->Packet.dest_port = COMMAND_RUP; |
1573 | CmdBlkP->Packet.len = PKT_CMD_BIT | 2; | 1419 | CmdBlkP->Packet.len = PKT_CMD_BIT | 2; |
1574 | CmdBlkP->PostFuncP = RIOUnUse; | 1420 | CmdBlkP->PostFuncP = RIOUnUse; |
1575 | CmdBlkP->PostArg = (int) PortP; | 1421 | CmdBlkP->PostArg = (unsigned long) PortP; |
1576 | PktCmdP->Command = Cmd; | 1422 | PktCmdP->Command = Cmd; |
1577 | port = PortP->HostPort % (ushort) PORTS_PER_RTA; | 1423 | port = PortP->HostPort % (ushort) PORTS_PER_RTA; |
1578 | /* | 1424 | /* |
@@ -1584,38 +1430,38 @@ uchar Cmd; | |||
1584 | 1430 | ||
1585 | switch (Cmd) { | 1431 | switch (Cmd) { |
1586 | case MEMDUMP: | 1432 | case MEMDUMP: |
1587 | rio_dprintk(RIO_DEBUG_CTRL, "Queue MEMDUMP command blk 0x%x (addr 0x%x)\n", (int) CmdBlkP, (int) SubCmd.Addr); | 1433 | rio_dprintk(RIO_DEBUG_CTRL, "Queue MEMDUMP command blk 0x%p (addr 0x%x)\n", CmdBlkP, (int) SubCmd.Addr); |
1588 | PktCmdP->SubCommand = MEMDUMP; | 1434 | PktCmdP->SubCommand = MEMDUMP; |
1589 | PktCmdP->SubAddr = SubCmd.Addr; | 1435 | PktCmdP->SubAddr = SubCmd.Addr; |
1590 | break; | 1436 | break; |
1591 | case FCLOSE: | 1437 | case FCLOSE: |
1592 | rio_dprintk(RIO_DEBUG_CTRL, "Queue FCLOSE command blk 0x%x\n", (int) CmdBlkP); | 1438 | rio_dprintk(RIO_DEBUG_CTRL, "Queue FCLOSE command blk 0x%p\n", CmdBlkP); |
1593 | break; | 1439 | break; |
1594 | case READ_REGISTER: | 1440 | case READ_REGISTER: |
1595 | rio_dprintk(RIO_DEBUG_CTRL, "Queue READ_REGISTER (0x%x) command blk 0x%x\n", (int) SubCmd.Addr, (int) CmdBlkP); | 1441 | rio_dprintk(RIO_DEBUG_CTRL, "Queue READ_REGISTER (0x%x) command blk 0x%p\n", (int) SubCmd.Addr, CmdBlkP); |
1596 | PktCmdP->SubCommand = READ_REGISTER; | 1442 | PktCmdP->SubCommand = READ_REGISTER; |
1597 | PktCmdP->SubAddr = SubCmd.Addr; | 1443 | PktCmdP->SubAddr = SubCmd.Addr; |
1598 | break; | 1444 | break; |
1599 | case RESUME: | 1445 | case RESUME: |
1600 | rio_dprintk(RIO_DEBUG_CTRL, "Queue RESUME command blk 0x%x\n", (int) CmdBlkP); | 1446 | rio_dprintk(RIO_DEBUG_CTRL, "Queue RESUME command blk 0x%p\n", CmdBlkP); |
1601 | break; | 1447 | break; |
1602 | case RFLUSH: | 1448 | case RFLUSH: |
1603 | rio_dprintk(RIO_DEBUG_CTRL, "Queue RFLUSH command blk 0x%x\n", (int) CmdBlkP); | 1449 | rio_dprintk(RIO_DEBUG_CTRL, "Queue RFLUSH command blk 0x%p\n", CmdBlkP); |
1604 | CmdBlkP->PostFuncP = RIORFlushEnable; | 1450 | CmdBlkP->PostFuncP = RIORFlushEnable; |
1605 | break; | 1451 | break; |
1606 | case SUSPEND: | 1452 | case SUSPEND: |
1607 | rio_dprintk(RIO_DEBUG_CTRL, "Queue SUSPEND command blk 0x%x\n", (int) CmdBlkP); | 1453 | rio_dprintk(RIO_DEBUG_CTRL, "Queue SUSPEND command blk 0x%p\n", CmdBlkP); |
1608 | break; | 1454 | break; |
1609 | 1455 | ||
1610 | case MGET: | 1456 | case MGET: |
1611 | rio_dprintk(RIO_DEBUG_CTRL, "Queue MGET command blk 0x%x\n", (int) CmdBlkP); | 1457 | rio_dprintk(RIO_DEBUG_CTRL, "Queue MGET command blk 0x%p\n", CmdBlkP); |
1612 | break; | 1458 | break; |
1613 | 1459 | ||
1614 | case MSET: | 1460 | case MSET: |
1615 | case MBIC: | 1461 | case MBIC: |
1616 | case MBIS: | 1462 | case MBIS: |
1617 | CmdBlkP->Packet.data[4] = (char) PortP->ModemLines; | 1463 | CmdBlkP->Packet.data[4] = (char) PortP->ModemLines; |
1618 | rio_dprintk(RIO_DEBUG_CTRL, "Queue MSET/MBIC/MBIS command blk 0x%x\n", (int) CmdBlkP); | 1464 | rio_dprintk(RIO_DEBUG_CTRL, "Queue MSET/MBIC/MBIS command blk 0x%p\n", CmdBlkP); |
1619 | break; | 1465 | break; |
1620 | 1466 | ||
1621 | case WFLUSH: | 1467 | case WFLUSH: |
@@ -1629,7 +1475,7 @@ uchar Cmd; | |||
1629 | RIOFreeCmdBlk(CmdBlkP); | 1475 | RIOFreeCmdBlk(CmdBlkP); |
1630 | return (RIO_FAIL); | 1476 | return (RIO_FAIL); |
1631 | } else { | 1477 | } else { |
1632 | rio_dprintk(RIO_DEBUG_CTRL, "Queue WFLUSH command blk 0x%x\n", (int) CmdBlkP); | 1478 | rio_dprintk(RIO_DEBUG_CTRL, "Queue WFLUSH command blk 0x%p\n", CmdBlkP); |
1633 | CmdBlkP->PostFuncP = RIOWFlushMark; | 1479 | CmdBlkP->PostFuncP = RIOWFlushMark; |
1634 | } | 1480 | } |
1635 | break; | 1481 | break; |