1*521fa314SDavid van Moolenbroek 2*521fa314SDavid van Moolenbroek #include "inc.h" 3*521fa314SDavid van Moolenbroek 4*521fa314SDavid van Moolenbroek #include <sys/ioctl.h> 5*521fa314SDavid van Moolenbroek #include <minix/i2c.h> 6*521fa314SDavid van Moolenbroek #include <minix/fb.h> 7*521fa314SDavid van Moolenbroek #include <minix/sound.h> 8*521fa314SDavid van Moolenbroek #include <sys/termios.h> 9*521fa314SDavid van Moolenbroek #include <sys/time.h> 10*521fa314SDavid van Moolenbroek #include <sys/kbdio.h> 11*521fa314SDavid van Moolenbroek #include <minix/keymap.h> 12*521fa314SDavid van Moolenbroek #include <sys/vm.h> 13*521fa314SDavid van Moolenbroek #include <sys/fcntl.h> 14*521fa314SDavid van Moolenbroek 15*521fa314SDavid van Moolenbroek const char * 16*521fa314SDavid van Moolenbroek char_ioctl_name(unsigned long req) 17*521fa314SDavid van Moolenbroek { 18*521fa314SDavid van Moolenbroek 19*521fa314SDavid van Moolenbroek switch (req) { 20*521fa314SDavid van Moolenbroek NAME(MINIX_I2C_IOCTL_EXEC); 21*521fa314SDavid van Moolenbroek NAME(FBIOGET_VSCREENINFO); 22*521fa314SDavid van Moolenbroek NAME(FBIOPUT_VSCREENINFO); 23*521fa314SDavid van Moolenbroek NAME(FBIOGET_FSCREENINFO); /* TODO: print argument */ 24*521fa314SDavid van Moolenbroek NAME(FBIOPAN_DISPLAY); 25*521fa314SDavid van Moolenbroek NAME(DSPIORATE); 26*521fa314SDavid van Moolenbroek NAME(DSPIOSTEREO); 27*521fa314SDavid van Moolenbroek NAME(DSPIOSIZE); 28*521fa314SDavid van Moolenbroek NAME(DSPIOBITS); 29*521fa314SDavid van Moolenbroek NAME(DSPIOSIGN); 30*521fa314SDavid van Moolenbroek NAME(DSPIOMAX); 31*521fa314SDavid van Moolenbroek NAME(DSPIORESET); /* no argument */ 32*521fa314SDavid van Moolenbroek NAME(DSPIOFREEBUF); 33*521fa314SDavid van Moolenbroek NAME(DSPIOSAMPLESINBUF); 34*521fa314SDavid van Moolenbroek NAME(DSPIOPAUSE); /* no argument */ 35*521fa314SDavid van Moolenbroek NAME(DSPIORESUME); /* no argument */ 36*521fa314SDavid van Moolenbroek NAME(MIXIOGETVOLUME); 37*521fa314SDavid van Moolenbroek NAME(MIXIOGETINPUTLEFT); 38*521fa314SDavid van Moolenbroek NAME(MIXIOGETINPUTRIGHT); 39*521fa314SDavid van Moolenbroek NAME(MIXIOGETOUTPUT); 40*521fa314SDavid van Moolenbroek NAME(MIXIOSETVOLUME); 41*521fa314SDavid van Moolenbroek NAME(MIXIOSETINPUTLEFT); 42*521fa314SDavid van Moolenbroek NAME(MIXIOSETINPUTRIGHT); 43*521fa314SDavid van Moolenbroek NAME(MIXIOSETOUTPUT); 44*521fa314SDavid van Moolenbroek NAME(TIOCEXCL); /* no argument */ 45*521fa314SDavid van Moolenbroek NAME(TIOCNXCL); /* no argument */ 46*521fa314SDavid van Moolenbroek NAME(TIOCFLUSH); 47*521fa314SDavid van Moolenbroek NAME(TIOCGETA); 48*521fa314SDavid van Moolenbroek NAME(TIOCSETA); 49*521fa314SDavid van Moolenbroek NAME(TIOCSETAW); 50*521fa314SDavid van Moolenbroek NAME(TIOCSETAF); 51*521fa314SDavid van Moolenbroek NAME(TIOCGETD); 52*521fa314SDavid van Moolenbroek NAME(TIOCSETD); 53*521fa314SDavid van Moolenbroek NAME(TIOCGLINED); 54*521fa314SDavid van Moolenbroek NAME(TIOCSLINED); 55*521fa314SDavid van Moolenbroek NAME(TIOCSBRK); /* no argument */ 56*521fa314SDavid van Moolenbroek NAME(TIOCCBRK); /* no argument */ 57*521fa314SDavid van Moolenbroek NAME(TIOCSDTR); /* no argument */ 58*521fa314SDavid van Moolenbroek NAME(TIOCCDTR); /* no argument */ 59*521fa314SDavid van Moolenbroek NAME(TIOCGPGRP); 60*521fa314SDavid van Moolenbroek NAME(TIOCSPGRP); 61*521fa314SDavid van Moolenbroek NAME(TIOCOUTQ); 62*521fa314SDavid van Moolenbroek NAME(TIOCSTI); 63*521fa314SDavid van Moolenbroek NAME(TIOCNOTTY); /* no argument */ 64*521fa314SDavid van Moolenbroek NAME(TIOCPKT); 65*521fa314SDavid van Moolenbroek NAME(TIOCSTOP); /* no argument */ 66*521fa314SDavid van Moolenbroek NAME(TIOCSTART); /* no argument */ 67*521fa314SDavid van Moolenbroek NAME(TIOCMSET); /* TODO: print argument */ 68*521fa314SDavid van Moolenbroek NAME(TIOCMBIS); /* TODO: print argument */ 69*521fa314SDavid van Moolenbroek NAME(TIOCMBIC); /* TODO: print argument */ 70*521fa314SDavid van Moolenbroek NAME(TIOCMGET); /* TODO: print argument */ 71*521fa314SDavid van Moolenbroek NAME(TIOCREMOTE); 72*521fa314SDavid van Moolenbroek NAME(TIOCGWINSZ); 73*521fa314SDavid van Moolenbroek NAME(TIOCSWINSZ); 74*521fa314SDavid van Moolenbroek NAME(TIOCUCNTL); 75*521fa314SDavid van Moolenbroek NAME(TIOCSTAT); 76*521fa314SDavid van Moolenbroek NAME(TIOCGSID); 77*521fa314SDavid van Moolenbroek NAME(TIOCCONS); 78*521fa314SDavid van Moolenbroek NAME(TIOCSCTTY); /* no argument */ 79*521fa314SDavid van Moolenbroek NAME(TIOCEXT); 80*521fa314SDavid van Moolenbroek NAME(TIOCSIG); /* no argument */ 81*521fa314SDavid van Moolenbroek NAME(TIOCDRAIN); /* no argument */ 82*521fa314SDavid van Moolenbroek NAME(TIOCGFLAGS); /* TODO: print argument */ 83*521fa314SDavid van Moolenbroek NAME(TIOCSFLAGS); /* TODO: print argument */ 84*521fa314SDavid van Moolenbroek NAME(TIOCDCDTIMESTAMP); /* TODO: print argument */ 85*521fa314SDavid van Moolenbroek NAME(TIOCRCVFRAME); /* TODO: print argument */ 86*521fa314SDavid van Moolenbroek NAME(TIOCXMTFRAME); /* TODO: print argument */ 87*521fa314SDavid van Moolenbroek NAME(TIOCPTMGET); /* TODO: print argument */ 88*521fa314SDavid van Moolenbroek NAME(TIOCGRANTPT); /* no argument */ 89*521fa314SDavid van Moolenbroek NAME(TIOCPTSNAME); /* TODO: print argument */ 90*521fa314SDavid van Moolenbroek NAME(TIOCSQSIZE); 91*521fa314SDavid van Moolenbroek NAME(TIOCGQSIZE); 92*521fa314SDavid van Moolenbroek NAME(TIOCSFON); /* big IOCTL, not printing argument */ 93*521fa314SDavid van Moolenbroek NAME(KIOCBELL); 94*521fa314SDavid van Moolenbroek NAME(KIOCSLEDS); 95*521fa314SDavid van Moolenbroek NAME(KIOCSMAP); /* not worth interpreting */ 96*521fa314SDavid van Moolenbroek NAME(TIOCMAPMEM); 97*521fa314SDavid van Moolenbroek NAME(TIOCUNMAPMEM); 98*521fa314SDavid van Moolenbroek } 99*521fa314SDavid van Moolenbroek 100*521fa314SDavid van Moolenbroek return NULL; 101*521fa314SDavid van Moolenbroek } 102*521fa314SDavid van Moolenbroek 103*521fa314SDavid van Moolenbroek static void 104*521fa314SDavid van Moolenbroek put_i2c_op(struct trace_proc * proc, const char *name, i2c_op_t op) 105*521fa314SDavid van Moolenbroek { 106*521fa314SDavid van Moolenbroek const char *text = NULL; 107*521fa314SDavid van Moolenbroek 108*521fa314SDavid van Moolenbroek if (!valuesonly) { 109*521fa314SDavid van Moolenbroek switch (op) { 110*521fa314SDavid van Moolenbroek TEXT(I2C_OP_READ); 111*521fa314SDavid van Moolenbroek TEXT(I2C_OP_READ_WITH_STOP); 112*521fa314SDavid van Moolenbroek TEXT(I2C_OP_WRITE); 113*521fa314SDavid van Moolenbroek TEXT(I2C_OP_WRITE_WITH_STOP); 114*521fa314SDavid van Moolenbroek TEXT(I2C_OP_READ_BLOCK); 115*521fa314SDavid van Moolenbroek TEXT(I2C_OP_WRITE_BLOCK); 116*521fa314SDavid van Moolenbroek } 117*521fa314SDavid van Moolenbroek } 118*521fa314SDavid van Moolenbroek 119*521fa314SDavid van Moolenbroek if (text != NULL) 120*521fa314SDavid van Moolenbroek put_field(proc, name, text); 121*521fa314SDavid van Moolenbroek else 122*521fa314SDavid van Moolenbroek put_value(proc, name, "%d", op); 123*521fa314SDavid van Moolenbroek } 124*521fa314SDavid van Moolenbroek 125*521fa314SDavid van Moolenbroek static void 126*521fa314SDavid van Moolenbroek put_sound_device(struct trace_proc * proc, const char * name, int device) 127*521fa314SDavid van Moolenbroek { 128*521fa314SDavid van Moolenbroek const char *text = NULL; 129*521fa314SDavid van Moolenbroek 130*521fa314SDavid van Moolenbroek if (!valuesonly) { 131*521fa314SDavid van Moolenbroek switch (device) { 132*521fa314SDavid van Moolenbroek TEXT(Master); 133*521fa314SDavid van Moolenbroek TEXT(Dac); 134*521fa314SDavid van Moolenbroek TEXT(Fm); 135*521fa314SDavid van Moolenbroek TEXT(Cd); 136*521fa314SDavid van Moolenbroek TEXT(Line); 137*521fa314SDavid van Moolenbroek TEXT(Mic); 138*521fa314SDavid van Moolenbroek TEXT(Speaker); 139*521fa314SDavid van Moolenbroek TEXT(Treble); 140*521fa314SDavid van Moolenbroek TEXT(Bass); 141*521fa314SDavid van Moolenbroek } 142*521fa314SDavid van Moolenbroek } 143*521fa314SDavid van Moolenbroek 144*521fa314SDavid van Moolenbroek if (text != NULL) 145*521fa314SDavid van Moolenbroek put_field(proc, name, text); 146*521fa314SDavid van Moolenbroek else 147*521fa314SDavid van Moolenbroek put_value(proc, name, "%d", device); 148*521fa314SDavid van Moolenbroek } 149*521fa314SDavid van Moolenbroek 150*521fa314SDavid van Moolenbroek static void 151*521fa314SDavid van Moolenbroek put_sound_state(struct trace_proc * proc, const char * name, int state) 152*521fa314SDavid van Moolenbroek { 153*521fa314SDavid van Moolenbroek 154*521fa314SDavid van Moolenbroek if (!valuesonly && state == ON) 155*521fa314SDavid van Moolenbroek put_field(proc, name, "ON"); 156*521fa314SDavid van Moolenbroek else if (!valuesonly && state == OFF) 157*521fa314SDavid van Moolenbroek put_field(proc, name, "OFF"); 158*521fa314SDavid van Moolenbroek else 159*521fa314SDavid van Moolenbroek put_value(proc, name, "%d", state); 160*521fa314SDavid van Moolenbroek } 161*521fa314SDavid van Moolenbroek 162*521fa314SDavid van Moolenbroek static const struct flags flush_flags[] = { 163*521fa314SDavid van Moolenbroek FLAG(FREAD), 164*521fa314SDavid van Moolenbroek FLAG(FWRITE), 165*521fa314SDavid van Moolenbroek }; 166*521fa314SDavid van Moolenbroek 167*521fa314SDavid van Moolenbroek static const struct flags tc_iflags[] = { 168*521fa314SDavid van Moolenbroek FLAG(IGNBRK), 169*521fa314SDavid van Moolenbroek FLAG(BRKINT), 170*521fa314SDavid van Moolenbroek FLAG(IGNPAR), 171*521fa314SDavid van Moolenbroek FLAG(PARMRK), 172*521fa314SDavid van Moolenbroek FLAG(INPCK), 173*521fa314SDavid van Moolenbroek FLAG(ISTRIP), 174*521fa314SDavid van Moolenbroek FLAG(INLCR), 175*521fa314SDavid van Moolenbroek FLAG(IGNCR), 176*521fa314SDavid van Moolenbroek FLAG(ICRNL), 177*521fa314SDavid van Moolenbroek FLAG(IXON), 178*521fa314SDavid van Moolenbroek FLAG(IXOFF), 179*521fa314SDavid van Moolenbroek FLAG(IXANY), 180*521fa314SDavid van Moolenbroek FLAG(IMAXBEL), 181*521fa314SDavid van Moolenbroek }; 182*521fa314SDavid van Moolenbroek 183*521fa314SDavid van Moolenbroek static const struct flags tc_oflags[] = { 184*521fa314SDavid van Moolenbroek FLAG(OPOST), 185*521fa314SDavid van Moolenbroek FLAG(ONLCR), 186*521fa314SDavid van Moolenbroek FLAG(OXTABS), 187*521fa314SDavid van Moolenbroek FLAG(ONOEOT), 188*521fa314SDavid van Moolenbroek FLAG(OCRNL), 189*521fa314SDavid van Moolenbroek FLAG(ONOCR), 190*521fa314SDavid van Moolenbroek FLAG(ONLRET), 191*521fa314SDavid van Moolenbroek }; 192*521fa314SDavid van Moolenbroek 193*521fa314SDavid van Moolenbroek static const struct flags tc_cflags[] = { 194*521fa314SDavid van Moolenbroek FLAG(CIGNORE), 195*521fa314SDavid van Moolenbroek FLAG_MASK(CSIZE, CS5), 196*521fa314SDavid van Moolenbroek FLAG_MASK(CSIZE, CS6), 197*521fa314SDavid van Moolenbroek FLAG_MASK(CSIZE, CS7), 198*521fa314SDavid van Moolenbroek FLAG_MASK(CSIZE, CS8), 199*521fa314SDavid van Moolenbroek FLAG(CSTOPB), 200*521fa314SDavid van Moolenbroek FLAG(CREAD), 201*521fa314SDavid van Moolenbroek FLAG(PARENB), 202*521fa314SDavid van Moolenbroek FLAG(PARODD), 203*521fa314SDavid van Moolenbroek FLAG(HUPCL), 204*521fa314SDavid van Moolenbroek FLAG(CLOCAL), 205*521fa314SDavid van Moolenbroek FLAG(CRTSCTS), 206*521fa314SDavid van Moolenbroek FLAG(CDTRCTS), 207*521fa314SDavid van Moolenbroek FLAG(MDMBUF), 208*521fa314SDavid van Moolenbroek }; 209*521fa314SDavid van Moolenbroek 210*521fa314SDavid van Moolenbroek static const struct flags tc_lflags[] = { 211*521fa314SDavid van Moolenbroek FLAG(ECHOKE), 212*521fa314SDavid van Moolenbroek FLAG(ECHOE), 213*521fa314SDavid van Moolenbroek FLAG(ECHOK), 214*521fa314SDavid van Moolenbroek FLAG(ECHO), 215*521fa314SDavid van Moolenbroek FLAG(ECHONL), 216*521fa314SDavid van Moolenbroek FLAG(ECHOPRT), 217*521fa314SDavid van Moolenbroek FLAG(ECHOCTL), 218*521fa314SDavid van Moolenbroek FLAG(ISIG), 219*521fa314SDavid van Moolenbroek FLAG(ICANON), 220*521fa314SDavid van Moolenbroek FLAG(ALTWERASE), 221*521fa314SDavid van Moolenbroek FLAG(IEXTEN), 222*521fa314SDavid van Moolenbroek FLAG(EXTPROC), 223*521fa314SDavid van Moolenbroek FLAG(TOSTOP), 224*521fa314SDavid van Moolenbroek FLAG(FLUSHO), 225*521fa314SDavid van Moolenbroek FLAG(NOKERNINFO), 226*521fa314SDavid van Moolenbroek FLAG(PENDIN), 227*521fa314SDavid van Moolenbroek FLAG(NOFLSH), 228*521fa314SDavid van Moolenbroek }; 229*521fa314SDavid van Moolenbroek 230*521fa314SDavid van Moolenbroek static void 231*521fa314SDavid van Moolenbroek put_tty_disc(struct trace_proc * proc, const char * name, int disc) 232*521fa314SDavid van Moolenbroek { 233*521fa314SDavid van Moolenbroek const char *text = NULL; 234*521fa314SDavid van Moolenbroek 235*521fa314SDavid van Moolenbroek if (!valuesonly) { 236*521fa314SDavid van Moolenbroek switch (disc) { 237*521fa314SDavid van Moolenbroek TEXT(TTYDISC); 238*521fa314SDavid van Moolenbroek TEXT(TABLDISC); 239*521fa314SDavid van Moolenbroek TEXT(SLIPDISC); 240*521fa314SDavid van Moolenbroek TEXT(PPPDISC); 241*521fa314SDavid van Moolenbroek TEXT(STRIPDISC); 242*521fa314SDavid van Moolenbroek TEXT(HDLCDISC); 243*521fa314SDavid van Moolenbroek } 244*521fa314SDavid van Moolenbroek } 245*521fa314SDavid van Moolenbroek 246*521fa314SDavid van Moolenbroek if (text != NULL) 247*521fa314SDavid van Moolenbroek put_field(proc, name, text); 248*521fa314SDavid van Moolenbroek else 249*521fa314SDavid van Moolenbroek put_value(proc, name, "%d", disc); 250*521fa314SDavid van Moolenbroek } 251*521fa314SDavid van Moolenbroek 252*521fa314SDavid van Moolenbroek static const struct flags kbd_leds[] = { 253*521fa314SDavid van Moolenbroek FLAG(KBD_LEDS_NUM), 254*521fa314SDavid van Moolenbroek FLAG(KBD_LEDS_CAPS), 255*521fa314SDavid van Moolenbroek FLAG(KBD_LEDS_SCROLL), 256*521fa314SDavid van Moolenbroek }; 257*521fa314SDavid van Moolenbroek 258*521fa314SDavid van Moolenbroek int 259*521fa314SDavid van Moolenbroek char_ioctl_arg(struct trace_proc * proc, unsigned long req, void * ptr, 260*521fa314SDavid van Moolenbroek int dir) 261*521fa314SDavid van Moolenbroek { 262*521fa314SDavid van Moolenbroek minix_i2c_ioctl_exec_t *iie; 263*521fa314SDavid van Moolenbroek struct fb_var_screeninfo *fbvs; 264*521fa314SDavid van Moolenbroek struct volume_level *level; 265*521fa314SDavid van Moolenbroek struct inout_ctrl *inout; 266*521fa314SDavid van Moolenbroek struct termios *tc; 267*521fa314SDavid van Moolenbroek struct winsize *ws; 268*521fa314SDavid van Moolenbroek struct kio_bell *bell; 269*521fa314SDavid van Moolenbroek struct kio_leds *leds; 270*521fa314SDavid van Moolenbroek struct mapreqvm *mapreq; 271*521fa314SDavid van Moolenbroek 272*521fa314SDavid van Moolenbroek switch (req) { 273*521fa314SDavid van Moolenbroek case MINIX_I2C_IOCTL_EXEC: 274*521fa314SDavid van Moolenbroek if ((iie = (minix_i2c_ioctl_exec_t *)ptr) == NULL) 275*521fa314SDavid van Moolenbroek return IF_OUT; /* we print only the request for now */ 276*521fa314SDavid van Moolenbroek 277*521fa314SDavid van Moolenbroek put_i2c_op(proc, "iie_op", iie->iie_op); 278*521fa314SDavid van Moolenbroek put_value(proc, "iie_addr", "0x%04x", iie->iie_addr); 279*521fa314SDavid van Moolenbroek return 0; /* TODO: print command/data/result */ 280*521fa314SDavid van Moolenbroek 281*521fa314SDavid van Moolenbroek case FBIOGET_VSCREENINFO: 282*521fa314SDavid van Moolenbroek if ((fbvs = (struct fb_var_screeninfo *)ptr) == NULL) 283*521fa314SDavid van Moolenbroek return IF_IN; 284*521fa314SDavid van Moolenbroek 285*521fa314SDavid van Moolenbroek put_value(proc, "xres", "%"PRIu32, fbvs->xres); 286*521fa314SDavid van Moolenbroek put_value(proc, "yres", "%"PRIu32, fbvs->yres); 287*521fa314SDavid van Moolenbroek put_value(proc, "xres_virtual", "%"PRIu32, fbvs->xres_virtual); 288*521fa314SDavid van Moolenbroek put_value(proc, "yres_virtual", "%"PRIu32, fbvs->yres_virtual); 289*521fa314SDavid van Moolenbroek put_value(proc, "xoffset", "%"PRIu32, fbvs->xoffset); 290*521fa314SDavid van Moolenbroek put_value(proc, "yoffset", "%"PRIu32, fbvs->yoffset); 291*521fa314SDavid van Moolenbroek put_value(proc, "bits_per_pixel", "%"PRIu32, 292*521fa314SDavid van Moolenbroek fbvs->bits_per_pixel); 293*521fa314SDavid van Moolenbroek return 0; 294*521fa314SDavid van Moolenbroek 295*521fa314SDavid van Moolenbroek case FBIOPUT_VSCREENINFO: 296*521fa314SDavid van Moolenbroek case FBIOPAN_DISPLAY: 297*521fa314SDavid van Moolenbroek if ((fbvs = (struct fb_var_screeninfo *)ptr) == NULL) 298*521fa314SDavid van Moolenbroek return IF_OUT; 299*521fa314SDavid van Moolenbroek 300*521fa314SDavid van Moolenbroek put_value(proc, "xoffset", "%"PRIu32, fbvs->xoffset); 301*521fa314SDavid van Moolenbroek put_value(proc, "yoffset", "%"PRIu32, fbvs->yoffset); 302*521fa314SDavid van Moolenbroek return 0; 303*521fa314SDavid van Moolenbroek 304*521fa314SDavid van Moolenbroek case DSPIORATE: 305*521fa314SDavid van Moolenbroek case DSPIOSTEREO: 306*521fa314SDavid van Moolenbroek case DSPIOSIZE: 307*521fa314SDavid van Moolenbroek case DSPIOBITS: 308*521fa314SDavid van Moolenbroek case DSPIOSIGN: 309*521fa314SDavid van Moolenbroek case DSPIOMAX: 310*521fa314SDavid van Moolenbroek case DSPIOFREEBUF: 311*521fa314SDavid van Moolenbroek case DSPIOSAMPLESINBUF: 312*521fa314SDavid van Moolenbroek if (ptr == NULL) 313*521fa314SDavid van Moolenbroek return dir; 314*521fa314SDavid van Moolenbroek 315*521fa314SDavid van Moolenbroek put_value(proc, NULL, "%u", *(unsigned int *)ptr); 316*521fa314SDavid van Moolenbroek return IF_ALL; 317*521fa314SDavid van Moolenbroek 318*521fa314SDavid van Moolenbroek case MIXIOGETVOLUME: 319*521fa314SDavid van Moolenbroek if ((level = (struct volume_level *)ptr) == NULL) 320*521fa314SDavid van Moolenbroek return dir; 321*521fa314SDavid van Moolenbroek 322*521fa314SDavid van Moolenbroek if (dir == IF_OUT) 323*521fa314SDavid van Moolenbroek put_sound_device(proc, "device", level->device); 324*521fa314SDavid van Moolenbroek else { 325*521fa314SDavid van Moolenbroek put_value(proc, "left", "%d", level->left); 326*521fa314SDavid van Moolenbroek put_value(proc, "right", "%d", level->right); 327*521fa314SDavid van Moolenbroek } 328*521fa314SDavid van Moolenbroek return IF_ALL; 329*521fa314SDavid van Moolenbroek 330*521fa314SDavid van Moolenbroek case MIXIOSETVOLUME: 331*521fa314SDavid van Moolenbroek /* Print the corrected volume levels only with verbosity on. */ 332*521fa314SDavid van Moolenbroek if ((level = (struct volume_level *)ptr) == NULL) 333*521fa314SDavid van Moolenbroek return IF_OUT | ((verbose > 0) ? IF_IN : 0); 334*521fa314SDavid van Moolenbroek 335*521fa314SDavid van Moolenbroek if (dir == IF_OUT) 336*521fa314SDavid van Moolenbroek put_sound_device(proc, "device", level->device); 337*521fa314SDavid van Moolenbroek put_value(proc, "left", "%d", level->left); 338*521fa314SDavid van Moolenbroek put_value(proc, "right", "%d", level->right); 339*521fa314SDavid van Moolenbroek return IF_ALL; 340*521fa314SDavid van Moolenbroek 341*521fa314SDavid van Moolenbroek case MIXIOGETINPUTLEFT: 342*521fa314SDavid van Moolenbroek case MIXIOGETINPUTRIGHT: 343*521fa314SDavid van Moolenbroek case MIXIOGETOUTPUT: 344*521fa314SDavid van Moolenbroek if ((inout = (struct inout_ctrl *)ptr) == NULL) 345*521fa314SDavid van Moolenbroek return dir; 346*521fa314SDavid van Moolenbroek 347*521fa314SDavid van Moolenbroek if (dir == IF_OUT) 348*521fa314SDavid van Moolenbroek put_sound_device(proc, "device", inout->device); 349*521fa314SDavid van Moolenbroek else { 350*521fa314SDavid van Moolenbroek put_sound_state(proc, "left", inout->left); 351*521fa314SDavid van Moolenbroek put_sound_state(proc, "right", inout->right); 352*521fa314SDavid van Moolenbroek } 353*521fa314SDavid van Moolenbroek return IF_ALL; 354*521fa314SDavid van Moolenbroek 355*521fa314SDavid van Moolenbroek case MIXIOSETINPUTLEFT: 356*521fa314SDavid van Moolenbroek case MIXIOSETINPUTRIGHT: 357*521fa314SDavid van Moolenbroek case MIXIOSETOUTPUT: 358*521fa314SDavid van Moolenbroek if ((inout = (struct inout_ctrl *)ptr) == NULL) 359*521fa314SDavid van Moolenbroek return IF_OUT; 360*521fa314SDavid van Moolenbroek 361*521fa314SDavid van Moolenbroek put_sound_device(proc, "device", inout->device); 362*521fa314SDavid van Moolenbroek put_sound_state(proc, "left", inout->left); 363*521fa314SDavid van Moolenbroek put_sound_state(proc, "right", inout->right); 364*521fa314SDavid van Moolenbroek return IF_ALL; 365*521fa314SDavid van Moolenbroek 366*521fa314SDavid van Moolenbroek case TIOCFLUSH: 367*521fa314SDavid van Moolenbroek if (ptr == NULL) 368*521fa314SDavid van Moolenbroek return IF_OUT; 369*521fa314SDavid van Moolenbroek 370*521fa314SDavid van Moolenbroek put_flags(proc, NULL, flush_flags, COUNT(flush_flags), "0x%x", 371*521fa314SDavid van Moolenbroek *(int *)ptr); 372*521fa314SDavid van Moolenbroek return IF_ALL; 373*521fa314SDavid van Moolenbroek 374*521fa314SDavid van Moolenbroek case TIOCGETA: 375*521fa314SDavid van Moolenbroek case TIOCSETA: 376*521fa314SDavid van Moolenbroek case TIOCSETAW: 377*521fa314SDavid van Moolenbroek case TIOCSETAF: 378*521fa314SDavid van Moolenbroek if ((tc = (struct termios *)ptr) == NULL) 379*521fa314SDavid van Moolenbroek return dir; 380*521fa314SDavid van Moolenbroek 381*521fa314SDavid van Moolenbroek /* 382*521fa314SDavid van Moolenbroek * These are fairly common IOCTLs, so printing everything by 383*521fa314SDavid van Moolenbroek * default would create a lot of noise. By default we limit 384*521fa314SDavid van Moolenbroek * ourselves to printing the field that contains what I 385*521fa314SDavid van Moolenbroek * consider to be the most important flag: ICANON. 386*521fa314SDavid van Moolenbroek * TODO: see if we can come up with a decent format for 387*521fa314SDavid van Moolenbroek * selectively printing (relatively important) flags. 388*521fa314SDavid van Moolenbroek */ 389*521fa314SDavid van Moolenbroek if (verbose > 0) { 390*521fa314SDavid van Moolenbroek put_flags(proc, "c_iflag", tc_iflags, COUNT(tc_iflags), 391*521fa314SDavid van Moolenbroek "0x%x", tc->c_iflag); 392*521fa314SDavid van Moolenbroek put_flags(proc, "c_oflag", tc_oflags, COUNT(tc_oflags), 393*521fa314SDavid van Moolenbroek "0x%x", tc->c_oflag); 394*521fa314SDavid van Moolenbroek put_flags(proc, "c_cflag", tc_cflags, COUNT(tc_cflags), 395*521fa314SDavid van Moolenbroek "0x%x", tc->c_cflag); 396*521fa314SDavid van Moolenbroek } 397*521fa314SDavid van Moolenbroek put_flags(proc, "c_lflag", tc_lflags, COUNT(tc_lflags), "0x%x", 398*521fa314SDavid van Moolenbroek tc->c_lflag); 399*521fa314SDavid van Moolenbroek if (verbose > 0) { 400*521fa314SDavid van Moolenbroek put_value(proc, "c_ispeed", "%d", tc->c_ispeed); 401*521fa314SDavid van Moolenbroek put_value(proc, "c_ospeed", "%d", tc->c_ospeed); 402*521fa314SDavid van Moolenbroek } 403*521fa314SDavid van Moolenbroek return 0; /* TODO: print the c_cc fields */ 404*521fa314SDavid van Moolenbroek 405*521fa314SDavid van Moolenbroek case TIOCGETD: 406*521fa314SDavid van Moolenbroek case TIOCSETD: 407*521fa314SDavid van Moolenbroek if (ptr == NULL) 408*521fa314SDavid van Moolenbroek return dir; 409*521fa314SDavid van Moolenbroek 410*521fa314SDavid van Moolenbroek put_tty_disc(proc, NULL, *(int *)ptr); 411*521fa314SDavid van Moolenbroek return IF_ALL; 412*521fa314SDavid van Moolenbroek 413*521fa314SDavid van Moolenbroek case TIOCGLINED: 414*521fa314SDavid van Moolenbroek case TIOCSLINED: 415*521fa314SDavid van Moolenbroek if (ptr == NULL) 416*521fa314SDavid van Moolenbroek return dir; 417*521fa314SDavid van Moolenbroek 418*521fa314SDavid van Moolenbroek put_buf(proc, NULL, PF_LOCADDR | PF_STRING, (vir_bytes)ptr, 419*521fa314SDavid van Moolenbroek sizeof(linedn_t)); 420*521fa314SDavid van Moolenbroek return IF_ALL; 421*521fa314SDavid van Moolenbroek 422*521fa314SDavid van Moolenbroek case TIOCGPGRP: 423*521fa314SDavid van Moolenbroek case TIOCSPGRP: 424*521fa314SDavid van Moolenbroek case TIOCOUTQ: 425*521fa314SDavid van Moolenbroek case TIOCPKT: 426*521fa314SDavid van Moolenbroek case TIOCREMOTE: 427*521fa314SDavid van Moolenbroek case TIOCUCNTL: 428*521fa314SDavid van Moolenbroek case TIOCSTAT: /* argument seems unused? */ 429*521fa314SDavid van Moolenbroek case TIOCGSID: 430*521fa314SDavid van Moolenbroek case TIOCCONS: /* argument seems unused? */ 431*521fa314SDavid van Moolenbroek case TIOCEXT: 432*521fa314SDavid van Moolenbroek case TIOCSQSIZE: 433*521fa314SDavid van Moolenbroek case TIOCGQSIZE: 434*521fa314SDavid van Moolenbroek /* Print a simple integer. */ 435*521fa314SDavid van Moolenbroek if (ptr == NULL) 436*521fa314SDavid van Moolenbroek return dir; 437*521fa314SDavid van Moolenbroek 438*521fa314SDavid van Moolenbroek put_value(proc, NULL, "%d", *(int *)ptr); 439*521fa314SDavid van Moolenbroek return IF_ALL; 440*521fa314SDavid van Moolenbroek 441*521fa314SDavid van Moolenbroek case TIOCSTI: 442*521fa314SDavid van Moolenbroek if (ptr == NULL) 443*521fa314SDavid van Moolenbroek return dir; 444*521fa314SDavid van Moolenbroek 445*521fa314SDavid van Moolenbroek if (!valuesonly) 446*521fa314SDavid van Moolenbroek put_value(proc, NULL, "'%s'", 447*521fa314SDavid van Moolenbroek get_escape(*(char *)ptr)); 448*521fa314SDavid van Moolenbroek else 449*521fa314SDavid van Moolenbroek put_value(proc, NULL, "%u", *(char *)ptr); 450*521fa314SDavid van Moolenbroek return IF_ALL; 451*521fa314SDavid van Moolenbroek 452*521fa314SDavid van Moolenbroek case TIOCGWINSZ: 453*521fa314SDavid van Moolenbroek case TIOCSWINSZ: 454*521fa314SDavid van Moolenbroek if ((ws = (struct winsize *)ptr) == NULL) 455*521fa314SDavid van Moolenbroek return dir; 456*521fa314SDavid van Moolenbroek 457*521fa314SDavid van Moolenbroek /* This is a stupid order, but we follow the struct layout. */ 458*521fa314SDavid van Moolenbroek put_value(proc, "ws_row", "%u", ws->ws_row); 459*521fa314SDavid van Moolenbroek put_value(proc, "ws_col", "%u", ws->ws_col); 460*521fa314SDavid van Moolenbroek if (verbose > 0) { 461*521fa314SDavid van Moolenbroek put_value(proc, "ws_xpixel", "%u", ws->ws_xpixel); 462*521fa314SDavid van Moolenbroek put_value(proc, "ws_ypixel", "%u", ws->ws_ypixel); 463*521fa314SDavid van Moolenbroek } 464*521fa314SDavid van Moolenbroek return (verbose > 0) ? IF_ALL : 0; 465*521fa314SDavid van Moolenbroek 466*521fa314SDavid van Moolenbroek case KIOCBELL: 467*521fa314SDavid van Moolenbroek if ((bell = (struct kio_bell *)ptr) == NULL) 468*521fa314SDavid van Moolenbroek return IF_OUT; 469*521fa314SDavid van Moolenbroek 470*521fa314SDavid van Moolenbroek put_value(proc, "kb_pitch", "%u", bell->kb_pitch); 471*521fa314SDavid van Moolenbroek put_value(proc, "kb_volume", "%lu", bell->kb_volume); 472*521fa314SDavid van Moolenbroek put_struct_timeval(proc, "kb_duration", PF_LOCADDR, 473*521fa314SDavid van Moolenbroek (vir_bytes)&bell->kb_duration); 474*521fa314SDavid van Moolenbroek 475*521fa314SDavid van Moolenbroek return IF_ALL; 476*521fa314SDavid van Moolenbroek 477*521fa314SDavid van Moolenbroek case KIOCSLEDS: 478*521fa314SDavid van Moolenbroek if ((leds = (struct kio_leds *)ptr) == NULL) 479*521fa314SDavid van Moolenbroek return IF_OUT; 480*521fa314SDavid van Moolenbroek 481*521fa314SDavid van Moolenbroek put_flags(proc, "kl_bits", kbd_leds, COUNT(kbd_leds), "0x%x", 482*521fa314SDavid van Moolenbroek leds->kl_bits); 483*521fa314SDavid van Moolenbroek return IF_ALL; 484*521fa314SDavid van Moolenbroek 485*521fa314SDavid van Moolenbroek case TIOCMAPMEM: 486*521fa314SDavid van Moolenbroek if ((mapreq = (struct mapreqvm *)ptr) == NULL) 487*521fa314SDavid van Moolenbroek return dir; 488*521fa314SDavid van Moolenbroek 489*521fa314SDavid van Moolenbroek /* This structure has more fields, but they're all unused.. */ 490*521fa314SDavid van Moolenbroek if (dir == IF_OUT) { 491*521fa314SDavid van Moolenbroek put_value(proc, "phys_offset", "%"PRIu64, 492*521fa314SDavid van Moolenbroek (uint64_t)mapreq->phys_offset); /* future compat */ 493*521fa314SDavid van Moolenbroek put_value(proc, "size", "%zu", mapreq->size); 494*521fa314SDavid van Moolenbroek } else 495*521fa314SDavid van Moolenbroek put_ptr(proc, "vaddr_ret", (vir_bytes)mapreq->vaddr); 496*521fa314SDavid van Moolenbroek return IF_ALL; 497*521fa314SDavid van Moolenbroek 498*521fa314SDavid van Moolenbroek case TIOCUNMAPMEM: 499*521fa314SDavid van Moolenbroek if ((mapreq = (struct mapreqvm *)ptr) == NULL) 500*521fa314SDavid van Moolenbroek return IF_OUT; 501*521fa314SDavid van Moolenbroek 502*521fa314SDavid van Moolenbroek put_ptr(proc, "vaddr", (vir_bytes)mapreq->vaddr); 503*521fa314SDavid van Moolenbroek put_value(proc, "size", "%zu", mapreq->size); 504*521fa314SDavid van Moolenbroek return IF_ALL; 505*521fa314SDavid van Moolenbroek 506*521fa314SDavid van Moolenbroek default: 507*521fa314SDavid van Moolenbroek return 0; 508*521fa314SDavid van Moolenbroek } 509*521fa314SDavid van Moolenbroek } 510