133510Sbostic /* 233510Sbostic * Copyright (c) 1982, 1986, 1988 Regents of the University of California. 333510Sbostic * All rights reserved. 433510Sbostic * 5*44516Sbostic * %sccs.include.redist.c% 633510Sbostic * 7*44516Sbostic * @(#)dev.c 7.8 (Berkeley) 06/28/90 833510Sbostic */ 933510Sbostic 1040501Sroot #include "sys/param.h" 1133510Sbostic #include "saio.h" 1233510Sbostic 1333670Sbostic /* 1440502Smckusick * NB: the value "io->i_dev", used to offset the devsw[] array 1533670Sbostic * in the routines below, is munged by the vaxstand Makefile to work 1633670Sbostic * for certain boots. 1733670Sbostic */ 1833670Sbostic 1933510Sbostic devread(io) 2033510Sbostic register struct iob *io; 2133510Sbostic { 2233510Sbostic int cc; 2333510Sbostic 2433510Sbostic io->i_flgs |= F_RDDATA; 2533510Sbostic io->i_error = 0; 2640502Smckusick cc = (*devsw[io->i_dev].dv_strategy)(io, READ); 2733510Sbostic io->i_flgs &= ~F_TYPEMASK; 2833510Sbostic return (cc); 2933510Sbostic } 3033510Sbostic 3133510Sbostic devwrite(io) 3233510Sbostic register struct iob *io; 3333510Sbostic { 3433510Sbostic int cc; 3533510Sbostic 3633510Sbostic io->i_flgs |= F_WRDATA; 3733510Sbostic io->i_error = 0; 3840502Smckusick cc = (*devsw[io->i_dev].dv_strategy)(io, WRITE); 3933510Sbostic io->i_flgs &= ~F_TYPEMASK; 4033510Sbostic return (cc); 4133510Sbostic } 4233510Sbostic 4333510Sbostic devopen(io) 4433510Sbostic register struct iob *io; 4533510Sbostic { 4633670Sbostic int ret; 4733670Sbostic 4840502Smckusick if (!(ret = (*devsw[io->i_dev].dv_open)(io))) 4933670Sbostic return (0); 5040502Smckusick printf("%s(%d,%d,%d,%d): ", devsw[io->i_dev].dv_name, 5133670Sbostic io->i_adapt, io->i_ctlr, io->i_unit, io->i_part); 5233670Sbostic switch(ret) { 5334517Skarels case EIO: 5434517Skarels break; /* already reported */ 5533670Sbostic case EADAPT: 5634517Skarels printf("bad adaptor number\n"); 5733670Sbostic break; 5833670Sbostic case ECTLR: 5934517Skarels printf("bad controller number\n"); 6033670Sbostic break; 6133670Sbostic case EUNIT: 6234517Skarels printf("bad drive number\n"); 6333670Sbostic break; 6433670Sbostic case EPART: 6533670Sbostic printf("bad partition\n"); 6633670Sbostic break; 6733670Sbostic case ERDLAB: 6833670Sbostic printf("can't read disk label\n"); 6933670Sbostic break; 7033670Sbostic case EUNLAB: 7133670Sbostic printf("unlabeled\n"); 7233670Sbostic break; 7333670Sbostic case ENXIO: 7434517Skarels printf("bad device specification\n"); 7534517Skarels break; 7633670Sbostic default: 7734517Skarels printf("unknown open error\n"); 7834517Skarels break; 7933670Sbostic } 8033670Sbostic return (ret); 8133510Sbostic } 8233510Sbostic 8333510Sbostic devclose(io) 8433510Sbostic register struct iob *io; 8533510Sbostic { 8640502Smckusick (*devsw[io->i_dev].dv_close)(io); 8733510Sbostic } 8833510Sbostic 8933510Sbostic devioctl(io, cmd, arg) 9033510Sbostic register struct iob *io; 9133510Sbostic int cmd; 9233510Sbostic caddr_t arg; 9333510Sbostic { 9440502Smckusick return ((*devsw[io->i_dev].dv_ioctl)(io, cmd, arg)); 9533510Sbostic } 9633510Sbostic 9733510Sbostic /*ARGSUSED*/ 9833510Sbostic nullsys(io) 9933510Sbostic struct iob *io; 10033510Sbostic {} 10133510Sbostic 10233510Sbostic /*ARGSUSED*/ 10333510Sbostic nodev(io) 10433510Sbostic struct iob *io; 10533510Sbostic { 10633510Sbostic errno = EBADF; 10733510Sbostic } 10833510Sbostic 10933510Sbostic /*ARGSUSED*/ 11033510Sbostic noioctl(io, cmd, arg) 11133510Sbostic struct iob *io; 11233510Sbostic int cmd; 11333510Sbostic caddr_t arg; 11433510Sbostic { 11533510Sbostic return (ECMD); 11633510Sbostic } 117