1
0
Files
irix-657m-src/eoe/lib/libmediad/mediad.h
2022-09-29 17:59:04 +03:00

199 lines
5.9 KiB
C

/**************************************************************************
* *
* Copyright (C) 1986,1988, Silicon Graphics, Inc. *
* *
* These coded instructions, statements, and computer programs contain *
* unpublished proprietary information of Silicon Graphics, Inc., and *
* are protected by Federal copyright law. They may not be disclosed *
* to third parties or copied or duplicated in any form, in whole or *
* in part, without the prior written consent of Silicon Graphics, Inc. *
* *
**************************************************************************/
#ident "$Revision: 1.20 $"
#ifndef __MEDIAD_H__
#define __MEDIAD_H__
#include <mntent.h> // for MNTMAXSTR
/*
* media clsses are for return_remmeddev_class to say what kind of media
* device it is based on the file name. Pretty gross. Could get rid
* of it if I'm completely dependent on lego.
*/
#define RMEDCLASS_UNKNOWN 0
#define RMEDCLASS_CDROM 1
#define RMEDCLASS_FLOPPY 2
#define RMEDCLASS_TAPE 3
#define RMEDCLASS_ZIP 4
#define RMEDCLASS_JAZ 5
#define RMEDCLASS_OPTICAL 6
#define RMEDCLASS_PCCARD 7
#define MUSICTYPESTR "music"
#define PHOTOCDTYPESTR "photocd"
#define DOSTYPESTR "dos"
#define EFSTYPESTR "efs"
#define MACTYPESTR "hfs"
#define HFSDIRTYTYPESTR "hfs_dirty"
#define NFSTYPESTR "nfs"
#define ISO9660TYPESTR "iso9660"
#define ARCHIVETYPESTR "archive"
#define UNKNOWNTYPESTR "unknown"
#define UNFORMATTED "unformatted"
#define NOTREADYSTR "notready"
#define INSTTYPESTR "inst"
/*
* Socket defs, message types, return codes, names of tables
* FSDAUTO is a file that tells mediad on startup what to monitor
* FSDTAB is a file that mediad updates as it monitors devices. The socket
* address is also there.
*/
#define SOCK_TEMPLATE "/tmp/.mediadXXXXXX"
#define SOCK "sock"
#define MEDIAD_SOCK_LEN 12
#define FSDAUTO "/etc/fsd.auto"
#define FSDTAB "/etc/fsd.tab"
#define EXOPT_MON "mon"
#define EXOPT_INSCHK "inschk"
#define EXOPT_RMVCHK "rmvchk"
typedef struct emsg {
long mtype;
int scsi;
int ctrl;
int lun;
char filename[MNTMAXSTR];
char progname[MNTMAXSTR];
} emsg_t;
typedef struct rmsg {
long mtype;
int error;
char mpoint[MNTMAXSTR];
} rmsg_t;
#define MSG_EJECT 0x000e9ec7L
#define MSG_RETURN 0x0105e746L
#define MSG_TERM 0x0007e7f0L
#define MSG_DIE 0x00091e00L
#define MSG_TEST 0x0007e570L
#define MSG_TESTOK 0x01000000L
#define MSG_SHOWMOUNT 0x02000000L
#define MSG_QUERY 0x04000000L
#define MSG_SUSPENDON 0x10000000L
#define MSG_SUSPENDOFF 0x20000000L
#define MSG_STARTENTRY 0x30000000L
#define MSG_STOPENTRY 0x40000000L
#define MSG_SETLOGLEVEL 0x80000000L
/*
* Various timeout values for sending and receiving socket messages.
* Timeout values for querying the objectserver.
* Number of misses before I decide objectserver is down.
* Polling interval of devices.
*/
#define SOCK_TIMEOUT 5
#define DUPMEDIAD_TIMEOUT 5
#define EJECT_TIMEOUT 45
#define KILL_TIMEOUT 45
#define MEDIAD_EXCLUSIVEUSE_TIMEOUT 30
#define OBJSERV_LONG_TIMEOUT 45
#define OBJSERV_SHORT_TIMEOUT 3
#define OBJSERV_UPDATE_TIMEOUT 1
#define OBJSERV_MISSEDCOUNT 25
#define DEFAULT_INSCHK_INTERVAL 3
#define DEFAULT_RMVCHK_INTERVAL 45
#define POSTEJECT_CHKS 15
#define FLEJECT_RETRY_COUNT 3
#define FLEJECT_RETRY_INTERVAL 2
#define RMED_NOERROR 0
#define RMED_EUSAGE 1
#define RMED_ECANTUMOUNT 2
#define RMED_ECANTEJECT 3
#define RMED_ENODISC 4
#define RMED_ENOSWEJECT 5
#define RMED_ENODEVICE 6
#define RMED_ESYSERR 7
#define RMED_EACCESS 8
#define RMED_ENOMEDIAD 9
#define RMED_TWOMEDIAD 10
#define RMED_ENOUNIQUE 11
#define RMED_ETERMSIG 12
#define RMED_CONTEJECT 13
#define RMED_NUMCODES 14
/*
* The controller, SCSI id, and the unit/type info for floppies are
* encoded in the minor number as follows:
* bit: 2 1 0 9 8 7 6 5 4 3 2 1 0
* 0-3: unit/type (0=48, 1=96, 2=96hi, 3=5.8.800k, 4=3.5, 5=3.5hi, 6=3.5.20m)
* 4-7: SCSI id
* 8-11: controller
* In other words, ctrl * 256, scsi * 16
* For Tapes, the algorithm is ctrl * 512, scsi * 32
* For CDROM, the algorithm is ctrl * 128, scsi * 1
* see /dev/MAKEDEV
*/
#define FLOPPY_CTRL(dev) (((minor(dev) >> 11) * 10) | ((minor(dev) >> 8) & 0x7))
#define FLOPPY_SCSI(dev) ((minor(dev) >> 4) & 07)
#define FLOPPY_UNIT(dev) (minor(dev) & 0xf)
#define FLOPPY_LUN(dev) (0)
#define TAPE_CTRL(dev) ((((minor(dev) >> 12) & 0xf) * 10) | \
((minor(dev) >> 9) & 0x7))
#define TAPE_SCSI(dev) ((minor(dev) >> 5) & 0xf)
#define TAPE_UNIT(dev) (minor(dev) & 0x1f)
#define TAPE_LUN(dev) (minor(dev) >> 16)
#define CDROM_CTRL(dev) (((minor(dev) >> 10) * 10) | ((minor(dev) >> 7) & 0x7))
#define CDROM_SCSI(dev) (minor(dev) & 0xF)
#define CDROM_LUN(dev) (minor(dev) >> 4 & 7)
#define DKSC_CTRL(dev) ((((minor(dev) >> 11) & 0xF) * 10) | ((minor(dev) >> 8) & 0x7))
#define DKSC_SCSI(dev) (minor(dev) >> 4 & 0xF)
#define DKSC_LUN(dev) (minor(dev) >> 15 & 7)
/*
* Function declarations.
*/
#ifdef __cplusplus
extern "C" {
#endif
int mediad_get_exclusiveuse(const char *spec_file, const char *prog_name);
void mediad_release_exclusiveuse(int exclusiveuse_id);
/*
* mediad_last_error returns more information about the status of
* the most recent call to mediad_get_exclusiveuse().
*
* If the most recent call successfully obtained exclusive use from
* mediad, mediad_last_error returns 0. If the most recent call has a
* system error, mediad_last_error returns -1, and errno should be
* consulted. (The app must not overwrite errno in the meantime.) If
* the most recent call contacted mediad, but mediad refused exclusive
* use, mediad_last error returns a positive value from the list of
* RMED_E* values above.
*
* N.B. If mediad is not running, mediad_get_exclusiveuse returns a
* successful (nonnegative) value, mediad_last_error returns -1, and
* errno == ECONNREFUSED.
*/
int mediad_last_error(void);
#ifdef __cplusplus
}
#endif
#endif /* !__MEDIAD_H__ */