67 lines
1.2 KiB
C
67 lines
1.2 KiB
C
/*
|
|
* ioctl.c for mdb -- decode an IOCTL system call
|
|
*/
|
|
#include "mdb.h"
|
|
#ifdef SYSCALLS_SUPPORT
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <fcntl.h>
|
|
#include <sys/stat.h>
|
|
#include <minix/type.h>
|
|
#include <minix/callnr.h>
|
|
#include <minix/com.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sgtty.h>
|
|
#include "proto.h"
|
|
|
|
static int get_request;
|
|
|
|
/*
|
|
* decode ioctl call
|
|
* send or receive = 'R' or 'S'
|
|
*/
|
|
void decode_ioctl(sr, m)
|
|
int sr;
|
|
message *m;
|
|
{
|
|
int request, device;
|
|
int high;
|
|
long spek, flags;
|
|
|
|
device = m->m2_i1;
|
|
request = m->m2_i3;
|
|
spek = m->m2_l1;
|
|
flags = m->m2_l2;
|
|
|
|
#ifdef DEBUG
|
|
if( debug )
|
|
Printf("%c device=%d request=%c|%d m2_l1=%lx m2_l2=%lx\n",
|
|
sr,device,
|
|
(request >> 8) & BYTE,
|
|
request & BYTE,
|
|
spek,flags);
|
|
#endif
|
|
|
|
if ( sr == 'R') request = get_request;
|
|
|
|
if ( sr == 'S' ) {
|
|
Printf("Sending (%lx) ", request);
|
|
get_request = request;
|
|
}
|
|
else
|
|
Printf("Receiving (%lx) ", request);
|
|
|
|
high = ( request & 0xFFFF0000 ) >> 16 ;
|
|
request &= _IOCTYPE_MASK;
|
|
|
|
Printf("Other IOCTL device=%d request=%c|%d flags=%x size =%d\n",
|
|
device, (request >> 8) & BYTE, request & BYTE,
|
|
(high & ~_IOCPARM_MASK ),
|
|
(high & _IOCPARM_MASK )
|
|
);
|
|
Printf("\n");
|
|
}
|
|
|
|
|
|
#endif /* SYSCALLS_SUPPORT */
|