home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
CMDS
/
mtools_3.6.src.lzh
/
MTOOLS_3.6
/
devices.h
< prev
next >
Wrap
Text File
|
1997-11-12
|
3KB
|
152 lines
#ifdef linux
#include <sys/types.h>
#include <linux/fd.h>
#include <linux/fdreg.h>
#include <linux/major.h>
#include <linux/fs.h>
typedef struct floppy_raw_cmd RawRequest_t;
UNUSED(static inline void RR_INIT(struct floppy_raw_cmd *request))
{
request->data = 0;
request->length = 0;
request->cmd_count = 9;
request->flags = FD_RAW_INTR | FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK
#ifdef FD_RAW_SOFTFAILUE
| FD_RAW_SOFTFAILURE | FD_RAW_STOP_IF_FAILURE
#endif
;
request->cmd[1] = 0;
request->cmd[6] = 0;
request->cmd[7] = 0x1b;
request->cmd[8] = 0xff;
request->reply_count = 0;
}
UNUSED(static inline void RR_SETRATE(struct floppy_raw_cmd *request, int rate))
{
request->rate = rate;
}
UNUSED(static inline void RR_SETDRIVE(struct floppy_raw_cmd *request,int drive))
{
request->cmd[1] = (request->cmd[1] & ~3) | (drive & 3);
}
UNUSED(static inline void RR_SETTRACK(struct floppy_raw_cmd *request,int track))
{
request->cmd[2] = track;
}
UNUSED(static inline void RR_SETPTRACK(struct floppy_raw_cmd *request,
int track))
{
request->track = track;
}
UNUSED(static inline void RR_SETHEAD(struct floppy_raw_cmd *request, int head))
{
if(head)
request->cmd[1] |= 4;
else
request->cmd[1] &= ~4;
request->cmd[3] = head;
}
UNUSED(static inline void RR_SETSECTOR(struct floppy_raw_cmd *request,
int sector))
{
request->cmd[4] = sector;
}
UNUSED(static inline void RR_SETSIZECODE(struct floppy_raw_cmd *request,
int sizecode))
{
request->cmd[5] = sizecode;
request->length += 128 << sizecode;
}
#if 0
static inline void RR_SETEND(struct floppy_raw_cmd *request, int end)
{
request->cmd[6] = end;
}
#endif
UNUSED(static inline void RR_SETDIRECTION(struct floppy_raw_cmd *request,
int direction))
{
if(direction == MT_READ) {
request->flags |= FD_RAW_READ;
request->cmd[0] = FD_READ;
} else {
request->flags |= FD_RAW_WRITE;
request->cmd[0] = FD_WRITE;
}
}
UNUSED(static inline void RR_SETDATA(struct floppy_raw_cmd *request,
caddr_t data))
{
request->data = data;
}
#if 0
static inline void RR_SETLENGTH(struct floppy_raw_cmd *request, int length)
{
request->length += length;
}
#endif
UNUSED(static inline void RR_SETCONT(struct floppy_raw_cmd *request))
{
#ifdef FD_RAW_MORE
request->flags |= FD_RAW_MORE;
#endif
}
UNUSED(static inline int RR_SIZECODE(struct floppy_raw_cmd *request))
{
return request->cmd[5];
}
UNUSED(static inline int RR_TRACK(struct floppy_raw_cmd *request))
{
return request->cmd[2];
}
UNUSED(static inline int GET_DRIVE(int fd))
{
struct stat statbuf;
if (fstat(fd, &statbuf) < 0 ){
perror("stat");
return -1;
}
if (!S_ISBLK(statbuf.st_mode) ||
MAJOR(statbuf.st_rdev) != FLOPPY_MAJOR)
return -1;
return MINOR( statbuf.st_rdev );
}
/* void print_message(RawRequest_t *raw_cmd,char *message);*/
int send_one_cmd(int fd, RawRequest_t *raw_cmd, const char *message);
int analyze_one_reply(RawRequest_t *raw_cmd, int *bytes, int do_print);
#endif