| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849 |
- From 92e55f1d1404e823b0a5fd6d0ea0b962de247e31 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <[email protected]>
- Date: Wed, 25 Feb 2015 17:00:32 +0100
- Subject: [PATCH] Add OSX support
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- Signed-off-by: Álvaro Fernández Rojas <[email protected]>
- ---
- Makefile | 16 +-
- src/boot.c | 1 +
- src/common.h | 54 ++++-
- src/file.c | 9 +-
- src/file.h | 2 +
- src/fsck.fat.h | 11 -
- src/io.c | 4 +-
- src/linux/fd.h | 383 ++++++++++++++++++++++++++++++
- src/linux/fs.h | 206 ++++++++++++++++
- src/linux/hdreg.h | 644 +++++++++++++++++++++++++++++++++++++++++++++++++++
- src/linux/magic.h | 76 ++++++
- src/linux/msdos_fs.h | 201 ++++++++++++++++
- src/mkfs.fat.c | 32 ++-
- 13 files changed, 1603 insertions(+), 36 deletions(-)
- create mode 100644 src/linux/fd.h
- create mode 100644 src/linux/fs.h
- create mode 100644 src/linux/hdreg.h
- create mode 100644 src/linux/magic.h
- create mode 100644 src/linux/msdos_fs.h
- diff --git a/Makefile b/Makefile
- index 3cbdb76..b86111d 100644
- --- a/Makefile
- +++ b/Makefile
- @@ -27,10 +27,16 @@ SBINDIR = $(PREFIX)/sbin
- DOCDIR = $(PREFIX)/share/doc
- MANDIR = $(PREFIX)/share/man
-
- +UNAME_S := $(shell uname -s)
- +ifeq ($(UNAME_S),Darwin)
- + CFLAGS += -D__osx__
- + LDLIBS += -liconv
- +endif
- +
- #OPTFLAGS = -O2 -fomit-frame-pointer -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
- OPTFLAGS = -O2 -fomit-frame-pointer -D_GNU_SOURCE $(shell getconf LFS_CFLAGS)
- #WARNFLAGS = -Wall -pedantic -std=c99
- -WARNFLAGS = -Wall -Wextra -Wno-sign-compare -Wno-missing-field-initializers -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings
- +WARNFLAGS = -Wall -Wextra -Wno-sign-compare -Wno-missing-field-initializers -Wmissing-prototypes -Wstrict-prototypes -Wwrite-strings -Wimplicit-function-declaration
- DEBUGFLAGS = -g
- CFLAGS += $(OPTFLAGS) $(WARNFLAGS) $(DEBUGFLAGS)
-
- @@ -62,7 +68,8 @@ install-man:
- for MANPAGE in manpages/en/*; \
- do \
- SECTION="8"; \
- - install -D -m 0644 $${MANPAGE} $(DESTDIR)/$(MANDIR)/man$${SECTION}/$$(basename $${MANPAGE}); \
- + mkdir -p $(DESTDIR)/$(MANDIR)/man$${SECTION}/; \
- + install -m 0644 $${MANPAGE} $(DESTDIR)/$(MANDIR)/man$${SECTION}/$$(basename $${MANPAGE}); \
- done
-
- for LANGUAGE in $(LANGUAGES); \
- @@ -70,7 +77,8 @@ install-man:
- for MANPAGE in manpages/$${LANGUAGE}/*; \
- do \
- SECTION="8"; \
- - install -D -m 0644 $${MANPAGE} $(DESTDIR)/$(MANDIR)/$${LANGUAGE}/man$${SECTION}/$$(basename $${MANPAGE} .$${LANGUAGE}.$${SECTION}).$${SECTION}; \
- + mkdir -p $(DESTDIR)/$(MANDIR)/$${LANGUAGE}/man$${SECTION}/; \
- + install -m 0644 $${MANPAGE} $(DESTDIR)/$(MANDIR)/$${LANGUAGE}/man$${SECTION}/$$(basename $${MANPAGE} .$${LANGUAGE}.$${SECTION}).$${SECTION}; \
- done; \
- done
- install-symlinks: install-bin install-man
- @@ -127,7 +135,7 @@ uninstall-man:
- for MANPAGE in manpages/en/*; \
- do \
- SECTION="8"; \
- - rm -f $(DESTDIR)/$(MANDIR}/man$${SECTION}/$$(basename $${MANPAGE} .en.$${SECTION}).$${SECTION}; \
- + rm -f $(DESTDIR)/$(MANDIR)/man$${SECTION}/$$(basename $${MANPAGE} .en.$${SECTION}).$${SECTION}; \
- done
-
- for LANGUAGE in $(LANGUAGES); \
- diff --git a/src/boot.c b/src/boot.c
- index be7bfb7..0c8b273 100644
- --- a/src/boot.c
- +++ b/src/boot.c
- @@ -31,6 +31,7 @@
- #include <time.h>
-
- #include "common.h"
- +#include "linux/msdos_fs.h"
- #include "fsck.fat.h"
- #include "fat.h"
- #include "io.h"
- diff --git a/src/common.h b/src/common.h
- index b127f63..e16c00c 100644
- --- a/src/common.h
- +++ b/src/common.h
- @@ -20,11 +20,61 @@
- can be found in /usr/share/common-licenses/GPL-3 file.
- */
-
- -#include <asm/types.h>
- -
- #ifndef _COMMON_H
- #define _COMMON_H
-
- +/* from linux/types.h */
- +#if defined(__linux__)
- + #include <linux/types.h>
- +#elif defined(__osx__)
- + #include <stdint.h>
- +
- + typedef uint8_t __u8;
- + typedef uint16_t __u16;
- + typedef uint32_t __u32;
- + typedef uint64_t __u64;
- +
- + typedef int16_t __le16;
- + typedef int32_t __le32;
- +
- + /* from linux stdio.h */
- + #ifndef loff_t
- + typedef long long loff_t;
- + #endif /* loff_t */
- +
- + #ifndef off64_t
- + #ifdef _LP64
- + typedef off_t off64_t;
- + #else
- + typedef __longlong_t off64_t;
- + #endif /* _LP64 */
- + #endif /* off64_t */
- +
- + /* from endian.h */
- + #if defined(__APPLE__) && defined(__MACH__)
- + #include <libkern/OSByteOrder.h>
- +
- + #define htobe16(x) OSSwapHostToBigInt16(x)
- + #define htole16(x) OSSwapHostToLittleInt16(x)
- + #define be16toh(x) OSSwapBigToHostInt16(x)
- + #define le16toh(x) OSSwapLittleToHostInt16(x)
- +
- + #define htobe32(x) OSSwapHostToBigInt32(x)
- + #define htole32(x) OSSwapHostToLittleInt32(x)
- + #define be32toh(x) OSSwapBigToHostInt32(x)
- + #define le32toh(x) OSSwapLittleToHostInt32(x)
- +
- + #define htobe64(x) OSSwapHostToBigInt64(x)
- + #define htole64(x) OSSwapHostToLittleInt64(x)
- + #define be64toh(x) OSSwapBigToHostInt64(x)
- + #define le64toh(x) OSSwapLittleToHostInt64(x)
- +
- + #ifndef lseek64
- + #define lseek64 lseek
- + #endif /* lseek64 */
- + #endif /* __APPLE__ && __MACH__ */
- +#endif
- +
- void die(const char *msg, ...) __attribute((noreturn));
-
- /* Displays a prinf-style message and terminates the program. */
- diff --git a/src/file.c b/src/file.c
- index 30adcde..1c1a5f0 100644
- --- a/src/file.c
- +++ b/src/file.c
- @@ -30,15 +30,8 @@
- #include <ctype.h>
- #include <unistd.h>
-
- -#define _LINUX_STAT_H /* hack to avoid inclusion of <linux/stat.h> */
- -#define _LINUX_STRING_H_ /* hack to avoid inclusion of <linux/string.h> */
- -#define _LINUX_FS_H /* hack to avoid inclusion of <linux/fs.h> */
- -
- -#include <asm/types.h>
- -
- -#include <linux/msdos_fs.h>
- -
- #include "common.h"
- +#include "linux/msdos_fs.h"
- #include "file.h"
- #include "charconv.h"
-
- diff --git a/src/file.h b/src/file.h
- index 3adfc96..f5dec16 100644
- --- a/src/file.h
- +++ b/src/file.h
- @@ -23,6 +23,8 @@
- #ifndef _FILE_H
- #define _FILE_H
-
- +#include "linux/msdos_fs.h"
- +
- typedef enum { fdt_none, fdt_drop, fdt_undelete } FD_TYPE;
-
- typedef struct _fptr {
- diff --git a/src/fsck.fat.h b/src/fsck.fat.h
- index e5ade5b..274820a 100644
- --- a/src/fsck.fat.h
- +++ b/src/fsck.fat.h
- @@ -28,19 +28,8 @@
- #define _DOSFSCK_H
-
- #include <fcntl.h>
- -#include <sys/types.h>
- -#define _LINUX_STAT_H /* hack to avoid inclusion of <linux/stat.h> */
- -#define _LINUX_STRING_H_ /* hack to avoid inclusion of <linux/string.h> */
- -#define _LINUX_FS_H /* hack to avoid inclusion of <linux/fs.h> */
- -
- -#include <asm/types.h>
- -#include <asm/byteorder.h>
- -
- -#include <linux/msdos_fs.h>
- -
- #include <stddef.h>
- #include <stdint.h>
- -#include <endian.h>
-
- #define VFAT_LN_ATTR (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME)
-
- diff --git a/src/io.c b/src/io.c
- index 3755ba5..fa96b62 100644
- --- a/src/io.c
- +++ b/src/io.c
- @@ -40,10 +40,10 @@
- #include <sys/ioctl.h>
- #include <errno.h>
- #include <fcntl.h>
- -#include <linux/fd.h>
-
- -#include "fsck.fat.h"
- +#include "linux/fd.h"
- #include "common.h"
- +#include "fsck.fat.h"
- #include "io.h"
-
- typedef struct _change {
- diff --git a/src/linux/fd.h b/src/linux/fd.h
- new file mode 100644
- index 0000000..ffe33a6
- --- /dev/null
- +++ b/src/linux/fd.h
- @@ -0,0 +1,383 @@
- +#ifndef _LINUX_FD_H
- +#define _LINUX_FD_H
- +
- +#ifdef __linux__
- +#include <linux/ioctl.h>
- +#endif
- +
- +/* New file layout: Now the ioctl definitions immediately follow the
- + * definitions of the structures that they use */
- +
- +/*
- + * Geometry
- + */
- +struct floppy_struct {
- + unsigned int size, /* nr of sectors total */
- + sect, /* sectors per track */
- + head, /* nr of heads */
- + track, /* nr of tracks */
- + stretch; /* bit 0 !=0 means double track steps */
- + /* bit 1 != 0 means swap sides */
- + /* bits 2..9 give the first sector */
- + /* number (the LSB is flipped) */
- +#define FD_STRETCH 1
- +#define FD_SWAPSIDES 2
- +#define FD_ZEROBASED 4
- +#define FD_SECTBASEMASK 0x3FC
- +#define FD_MKSECTBASE(s) (((s) ^ 1) << 2)
- +#define FD_SECTBASE(floppy) ((((floppy)->stretch & FD_SECTBASEMASK) >> 2) ^ 1)
- +
- + unsigned char gap, /* gap1 size */
- +
- + rate, /* data rate. |= 0x40 for perpendicular */
- +#define FD_2M 0x4
- +#define FD_SIZECODEMASK 0x38
- +#define FD_SIZECODE(floppy) (((((floppy)->rate&FD_SIZECODEMASK)>> 3)+ 2) %8)
- +#define FD_SECTSIZE(floppy) ( (floppy)->rate & FD_2M ? \
- + 512 : 128 << FD_SIZECODE(floppy) )
- +#define FD_PERP 0x40
- +
- + spec1, /* stepping rate, head unload time */
- + fmt_gap; /* gap2 size */
- + const char * name; /* used only for predefined formats */
- +};
- +
- +
- +/* commands needing write access have 0x40 set */
- +/* commands needing super user access have 0x80 set */
- +
- +#define FDCLRPRM _IO(2, 0x41)
- +/* clear user-defined parameters */
- +
- +#define FDSETPRM _IOW(2, 0x42, struct floppy_struct)
- +#define FDSETMEDIAPRM FDSETPRM
- +/* set user-defined parameters for current media */
- +
- +#define FDDEFPRM _IOW(2, 0x43, struct floppy_struct)
- +#define FDGETPRM _IOR(2, 0x04, struct floppy_struct)
- +#define FDDEFMEDIAPRM FDDEFPRM
- +#define FDGETMEDIAPRM FDGETPRM
- +/* set/get disk parameters */
- +
- +
- +#define FDMSGON _IO(2,0x45)
- +#define FDMSGOFF _IO(2,0x46)
- +/* issue/don't issue kernel messages on media type change */
- +
- +
- +/*
- + * Formatting (obsolete)
- + */
- +#define FD_FILL_BYTE 0xF6 /* format fill byte. */
- +
- +struct format_descr {
- + unsigned int device,head,track;
- +};
- +
- +#define FDFMTBEG _IO(2,0x47)
- +/* begin formatting a disk */
- +#define FDFMTTRK _IOW(2,0x48, struct format_descr)
- +/* format the specified track */
- +#define FDFMTEND _IO(2,0x49)
- +/* end formatting a disk */
- +
- +
- +/*
- + * Error thresholds
- + */
- +struct floppy_max_errors {
- + unsigned int
- + abort, /* number of errors to be reached before aborting */
- + read_track, /* maximal number of errors permitted to read an
- + * entire track at once */
- + reset, /* maximal number of errors before a reset is tried */
- + recal, /* maximal number of errors before a recalibrate is
- + * tried */
- +
- + /*
- + * Threshold for reporting FDC errors to the console.
- + * Setting this to zero may flood your screen when using
- + * ultra cheap floppies ;-)
- + */
- + reporting;
- +
- +};
- +
- +#define FDSETEMSGTRESH _IO(2,0x4a)
- +/* set fdc error reporting threshold */
- +
- +#define FDFLUSH _IO(2,0x4b)
- +/* flush buffers for media; either for verifying media, or for
- + * handling a media change without closing the file descriptor */
- +
- +#define FDSETMAXERRS _IOW(2, 0x4c, struct floppy_max_errors)
- +#define FDGETMAXERRS _IOR(2, 0x0e, struct floppy_max_errors)
- +/* set/get abortion and read_track threshold. See also floppy_drive_params
- + * structure */
- +
- +
- +typedef char floppy_drive_name[16];
- +#define FDGETDRVTYP _IOR(2, 0x0f, floppy_drive_name)
- +/* get drive type: 5 1/4 or 3 1/2 */
- +
- +
- +/*
- + * Drive parameters (user modifiable)
- + */
- +struct floppy_drive_params {
- + signed char cmos; /* CMOS type */
- +
- + /* Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms
- + * etc) and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA).
- + */
- + unsigned long max_dtr; /* Step rate, usec */
- + unsigned long hlt; /* Head load/settle time, msec */
- + unsigned long hut; /* Head unload time (remnant of
- + * 8" drives) */
- + unsigned long srt; /* Step rate, usec */
- +
- + unsigned long spinup; /* time needed for spinup (expressed
- + * in jiffies) */
- + unsigned long spindown; /* timeout needed for spindown */
- + unsigned char spindown_offset; /* decides in which position the disk
- + * will stop */
- + unsigned char select_delay; /* delay to wait after select */
- + unsigned char rps; /* rotations per second */
- + unsigned char tracks; /* maximum number of tracks */
- + unsigned long timeout; /* timeout for interrupt requests */
- +
- + unsigned char interleave_sect; /* if there are more sectors, use
- + * interleave */
- +
- + struct floppy_max_errors max_errors;
- +
- + char flags; /* various flags, including ftd_msg */
- +/*
- + * Announce successful media type detection and media information loss after
- + * disk changes.
- + * Also used to enable/disable printing of overrun warnings.
- + */
- +
- +#define FTD_MSG 0x10
- +#define FD_BROKEN_DCL 0x20
- +#define FD_DEBUG 0x02
- +#define FD_SILENT_DCL_CLEAR 0x4
- +#define FD_INVERTED_DCL 0x80 /* must be 0x80, because of hardware
- + considerations */
- +
- + char read_track; /* use readtrack during probing? */
- +
- +/*
- + * Auto-detection. Each drive type has eight formats which are
- + * used in succession to try to read the disk. If the FDC cannot lock onto
- + * the disk, the next format is tried. This uses the variable 'probing'.
- + */
- + short autodetect[8]; /* autodetected formats */
- +
- + int checkfreq; /* how often should the drive be checked for disk
- + * changes */
- + int native_format; /* native format of this drive */
- +};
- +
- +enum {
- + FD_NEED_TWADDLE_BIT, /* more magic */
- + FD_VERIFY_BIT, /* inquire for write protection */
- + FD_DISK_NEWCHANGE_BIT, /* change detected, and no action undertaken yet
- + * to clear media change status */
- + FD_UNUSED_BIT,
- + FD_DISK_CHANGED_BIT, /* disk has been changed since last i/o */
- + FD_DISK_WRITABLE_BIT /* disk is writable */
- +};
- +
- +#define FDSETDRVPRM _IOW(2, 0x90, struct floppy_drive_params)
- +#define FDGETDRVPRM _IOR(2, 0x11, struct floppy_drive_params)
- +/* set/get drive parameters */
- +
- +
- +/*
- + * Current drive state (not directly modifiable by user, readonly)
- + */
- +struct floppy_drive_struct {
- + unsigned long flags;
- +/* values for these flags */
- +#define FD_NEED_TWADDLE (1 << FD_NEED_TWADDLE_BIT)
- +#define FD_VERIFY (1 << FD_VERIFY_BIT)
- +#define FD_DISK_NEWCHANGE (1 << FD_DISK_NEWCHANGE_BIT)
- +#define FD_DISK_CHANGED (1 << FD_DISK_CHANGED_BIT)
- +#define FD_DISK_WRITABLE (1 << FD_DISK_WRITABLE_BIT)
- +
- + unsigned long spinup_date;
- + unsigned long select_date;
- + unsigned long first_read_date;
- + short probed_format;
- + short track; /* current track */
- + short maxblock; /* id of highest block read */
- + short maxtrack; /* id of highest half track read */
- + int generation; /* how many diskchanges? */
- +
- +/*
- + * (User-provided) media information is _not_ discarded after a media change
- + * if the corresponding keep_data flag is non-zero. Positive values are
- + * decremented after each probe.
- + */
- + int keep_data;
- +
- + /* Prevent "aliased" accesses. */
- + int fd_ref;
- + int fd_device;
- + unsigned long last_checked; /* when was the drive last checked for a disk
- + * change? */
- +
- + char *dmabuf;
- + int bufblocks;
- +};
- +
- +#define FDGETDRVSTAT _IOR(2, 0x12, struct floppy_drive_struct)
- +#define FDPOLLDRVSTAT _IOR(2, 0x13, struct floppy_drive_struct)
- +/* get drive state: GET returns the cached state, POLL polls for new state */
- +
- +
- +/*
- + * reset FDC
- + */
- +enum reset_mode {
- + FD_RESET_IF_NEEDED, /* reset only if the reset flags is set */
- + FD_RESET_IF_RAWCMD, /* obsolete */
- + FD_RESET_ALWAYS /* reset always */
- +};
- +#define FDRESET _IO(2, 0x54)
- +
- +
- +/*
- + * FDC state
- + */
- +struct floppy_fdc_state {
- + int spec1; /* spec1 value last used */
- + int spec2; /* spec2 value last used */
- + int dtr;
- + unsigned char version; /* FDC version code */
- + unsigned char dor;
- + unsigned long address; /* io address */
- + unsigned int rawcmd:2;
- + unsigned int reset:1;
- + unsigned int need_configure:1;
- + unsigned int perp_mode:2;
- + unsigned int has_fifo:1;
- + unsigned int driver_version; /* version code for floppy driver */
- +#define FD_DRIVER_VERSION 0x100
- +/* user programs using the floppy API should use floppy_fdc_state to
- + * get the version number of the floppy driver that they are running
- + * on. If this version number is bigger than the one compiled into the
- + * user program (the FD_DRIVER_VERSION define), it should be prepared
- + * to bigger structures
- + */
- +
- + unsigned char track[4];
- + /* Position of the heads of the 4 units attached to this FDC,
- + * as stored on the FDC. In the future, the position as stored
- + * on the FDC might not agree with the actual physical
- + * position of these drive heads. By allowing such
- + * disagreement, it will be possible to reset the FDC without
- + * incurring the expensive cost of repositioning all heads.
- + * Right now, these positions are hard wired to 0. */
- +
- +};
- +
- +#define FDGETFDCSTAT _IOR(2, 0x15, struct floppy_fdc_state)
- +
- +
- +/*
- + * Asynchronous Write error tracking
- + */
- +struct floppy_write_errors {
- + /* Write error logging.
- + *
- + * These fields can be cleared with the FDWERRORCLR ioctl.
- + * Only writes that were attempted but failed due to a physical media
- + * error are logged. write(2) calls that fail and return an error code
- + * to the user process are not counted.
- + */
- +
- + unsigned int write_errors; /* number of physical write errors
- + * encountered */
- +
- + /* position of first and last write errors */
- + unsigned long first_error_sector;
- + int first_error_generation;
- + unsigned long last_error_sector;
- + int last_error_generation;
- +
- + unsigned int badness; /* highest retry count for a read or write
- + * operation */
- +};
- +
- +#define FDWERRORCLR _IO(2, 0x56)
- +/* clear write error and badness information */
- +#define FDWERRORGET _IOR(2, 0x17, struct floppy_write_errors)
- +/* get write error and badness information */
- +
- +
- +/*
- + * Raw commands
- + */
- +/* new interface flag: now we can do them in batches */
- +#define FDHAVEBATCHEDRAWCMD
- +
- +struct floppy_raw_cmd {
- + unsigned int flags;
- +#define FD_RAW_READ 1
- +#define FD_RAW_WRITE 2
- +#define FD_RAW_NO_MOTOR 4
- +#define FD_RAW_DISK_CHANGE 4 /* out: disk change flag was set */
- +#define FD_RAW_INTR 8 /* wait for an interrupt */
- +#define FD_RAW_SPIN 0x10 /* spin up the disk for this command */
- +#define FD_RAW_NO_MOTOR_AFTER 0x20 /* switch the motor off after command
- + * completion */
- +#define FD_RAW_NEED_DISK 0x40 /* this command needs a disk to be present */
- +#define FD_RAW_NEED_SEEK 0x80 /* this command uses an implied seek (soft) */
- +
- +/* more "in" flags */
- +#define FD_RAW_MORE 0x100 /* more records follow */
- +#define FD_RAW_STOP_IF_FAILURE 0x200 /* stop if we encounter a failure */
- +#define FD_RAW_STOP_IF_SUCCESS 0x400 /* stop if command successful */
- +#define FD_RAW_SOFTFAILURE 0x800 /* consider the return value for failure
- + * detection too */
- +
- +/* more "out" flags */
- +#define FD_RAW_FAILURE 0x10000 /* command sent to fdc, fdc returned error */
- +#define FD_RAW_HARDFAILURE 0x20000 /* fdc had to be reset, or timed out */
- +
- + void *data;
- + char *kernel_data; /* location of data buffer in the kernel */
- + struct floppy_raw_cmd *next; /* used for chaining of raw cmd's
- + * within the kernel */
- + long length; /* in: length of dma transfer. out: remaining bytes */
- + long phys_length; /* physical length, if different from dma length */
- + int buffer_length; /* length of allocated buffer */
- +
- + unsigned char rate;
- + unsigned char cmd_count;
- + unsigned char cmd[16];
- + unsigned char reply_count;
- + unsigned char reply[16];
- + int track;
- + int resultcode;
- +
- + int reserved1;
- + int reserved2;
- +};
- +
- +#define FDRAWCMD _IO(2, 0x58)
- +/* send a raw command to the fdc. Structure size not included, because of
- + * batches */
- +
- +#define FDTWADDLE _IO(2, 0x59)
- +/* flicker motor-on bit before reading a sector. Experimental */
- +
- +
- +#define FDEJECT _IO(2, 0x5a)
- +/* eject the disk */
- +
- +
- +
- +#endif /* _LINUX_FD_H */
- diff --git a/src/linux/fs.h b/src/linux/fs.h
- new file mode 100644
- index 0000000..8639ce5
- --- /dev/null
- +++ b/src/linux/fs.h
- @@ -0,0 +1,206 @@
- +#ifndef _LINUX_FS_H
- +#define _LINUX_FS_H
- +
- +/*
- + * This file has definitions for some important file table
- + * structures etc.
- + */
- +
- +#ifdef __linux__
- +#include <linux/limits.h>
- +#include <linux/ioctl.h>
- +#include <linux/types.h>
- +#endif
- +
- +/*
- + * It's silly to have NR_OPEN bigger than NR_FILE, but you can change
- + * the file limit at runtime and only root can increase the per-process
- + * nr_file rlimit, so it's safe to set up a ridiculously high absolute
- + * upper limit on files-per-process.
- + *
- + * Some programs (notably those using select()) may have to be
- + * recompiled to take full advantage of the new limits..
- + */
- +
- +/* Fixed constants first: */
- +#undef NR_OPEN
- +#define INR_OPEN_CUR 1024 /* Initial setting for nfile rlimits */
- +#define INR_OPEN_MAX 4096 /* Hard limit for nfile rlimits */
- +
- +#define BLOCK_SIZE_BITS 10
- +#define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
- +
- +#define SEEK_SET 0 /* seek relative to beginning of file */
- +#define SEEK_CUR 1 /* seek relative to current file position */
- +#define SEEK_END 2 /* seek relative to end of file */
- +#define SEEK_DATA 3 /* seek to the next data */
- +#define SEEK_HOLE 4 /* seek to the next hole */
- +#define SEEK_MAX SEEK_HOLE
- +
- +struct fstrim_range {
- + __u64 start;
- + __u64 len;
- + __u64 minlen;
- +};
- +
- +/* And dynamically-tunable limits and defaults: */
- +struct files_stat_struct {
- + unsigned long nr_files; /* read only */
- + unsigned long nr_free_files; /* read only */
- + unsigned long max_files; /* tunable */
- +};
- +
- +struct inodes_stat_t {
- + long nr_inodes;
- + long nr_unused;
- + long dummy[5]; /* padding for sysctl ABI compatibility */
- +};
- +
- +
- +#define NR_FILE 8192 /* this can well be larger on a larger system */
- +
- +
- +/*
- + * These are the fs-independent mount-flags: up to 32 flags are supported
- + */
- +#define MS_RDONLY 1 /* Mount read-only */
- +#define MS_NOSUID 2 /* Ignore suid and sgid bits */
- +#define MS_NODEV 4 /* Disallow access to device special files */
- +#define MS_NOEXEC 8 /* Disallow program execution */
- +#define MS_SYNCHRONOUS 16 /* Writes are synced at once */
- +#define MS_REMOUNT 32 /* Alter flags of a mounted FS */
- +#define MS_MANDLOCK 64 /* Allow mandatory locks on an FS */
- +#define MS_DIRSYNC 128 /* Directory modifications are synchronous */
- +#define MS_NOATIME 1024 /* Do not update access times. */
- +#define MS_NODIRATIME 2048 /* Do not update directory access times */
- +#define MS_BIND 4096
- +#define MS_MOVE 8192
- +#define MS_REC 16384
- +#define MS_VERBOSE 32768 /* War is peace. Verbosity is silence.
- + MS_VERBOSE is deprecated. */
- +#define MS_SILENT 32768
- +#define MS_POSIXACL (1<<16) /* VFS does not apply the umask */
- +#define MS_UNBINDABLE (1<<17) /* change to unbindable */
- +#define MS_PRIVATE (1<<18) /* change to private */
- +#define MS_SLAVE (1<<19) /* change to slave */
- +#define MS_SHARED (1<<20) /* change to shared */
- +#define MS_RELATIME (1<<21) /* Update atime relative to mtime/ctime. */
- +#define MS_KERNMOUNT (1<<22) /* this is a kern_mount call */
- +#define MS_I_VERSION (1<<23) /* Update inode I_version field */
- +#define MS_STRICTATIME (1<<24) /* Always perform atime updates */
- +
- +/* These sb flags are internal to the kernel */
- +#define MS_NOSEC (1<<28)
- +#define MS_BORN (1<<29)
- +#define MS_ACTIVE (1<<30)
- +#define MS_NOUSER (1<<31)
- +
- +/*
- + * Superblock flags that can be altered by MS_REMOUNT
- + */
- +#define MS_RMT_MASK (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK|MS_I_VERSION)
- +
- +/*
- + * Old magic mount flag and mask
- + */
- +#define MS_MGC_VAL 0xC0ED0000
- +#define MS_MGC_MSK 0xffff0000
- +
- +/* the read-only stuff doesn't really belong here, but any other place is
- + probably as bad and I don't want to create yet another include file. */
- +
- +#define BLKROSET _IO(0x12,93) /* set device read-only (0 = read-write) */
- +#define BLKROGET _IO(0x12,94) /* get read-only status (0 = read_write) */
- +#define BLKRRPART _IO(0x12,95) /* re-read partition table */
- +#define BLKGETSIZE _IO(0x12,96) /* return device size /512 (long *arg) */
- +#define BLKFLSBUF _IO(0x12,97) /* flush buffer cache */
- +#define BLKRASET _IO(0x12,98) /* set read ahead for block device */
- +#define BLKRAGET _IO(0x12,99) /* get current read ahead setting */
- +#define BLKFRASET _IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
- +#define BLKFRAGET _IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
- +#define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
- +#define BLKSECTGET _IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
- +#define BLKSSZGET _IO(0x12,104)/* get block device sector size */
- +#if 0
- +#define BLKPG _IO(0x12,105)/* See blkpg.h */
- +
- +/* Some people are morons. Do not use sizeof! */
- +
- +#define BLKELVGET _IOR(0x12,106,size_t)/* elevator get */
- +#define BLKELVSET _IOW(0x12,107,size_t)/* elevator set */
- +/* This was here just to show that the number is taken -
- + probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
- +#endif
- +/* A jump here: 108-111 have been used for various private purposes. */
- +#define BLKBSZGET _IOR(0x12,112,size_t)
- +#define BLKBSZSET _IOW(0x12,113,size_t)
- +#define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size in bytes (u64 *arg) */
- +#define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup)
- +#define BLKTRACESTART _IO(0x12,116)
- +#define BLKTRACESTOP _IO(0x12,117)
- +#define BLKTRACETEARDOWN _IO(0x12,118)
- +#define BLKDISCARD _IO(0x12,119)
- +#define BLKIOMIN _IO(0x12,120)
- +#define BLKIOOPT _IO(0x12,121)
- +#define BLKALIGNOFF _IO(0x12,122)
- +#define BLKPBSZGET _IO(0x12,123)
- +#define BLKDISCARDZEROES _IO(0x12,124)
- +#define BLKSECDISCARD _IO(0x12,125)
- +#define BLKROTATIONAL _IO(0x12,126)
- +#define BLKZEROOUT _IO(0x12,127)
- +
- +#define BMAP_IOCTL 1 /* obsolete - kept for compatibility */
- +#define FIBMAP _IO(0x00,1) /* bmap access */
- +#define FIGETBSZ _IO(0x00,2) /* get the block size used for bmap */
- +#define FIFREEZE _IOWR('X', 119, int) /* Freeze */
- +#define FITHAW _IOWR('X', 120, int) /* Thaw */
- +#define FITRIM _IOWR('X', 121, struct fstrim_range) /* Trim */
- +
- +#define FS_IOC_GETFLAGS _IOR('f', 1, long)
- +#define FS_IOC_SETFLAGS _IOW('f', 2, long)
- +#define FS_IOC_GETVERSION _IOR('v', 1, long)
- +#define FS_IOC_SETVERSION _IOW('v', 2, long)
- +#define FS_IOC_FIEMAP _IOWR('f', 11, struct fiemap)
- +#define FS_IOC32_GETFLAGS _IOR('f', 1, int)
- +#define FS_IOC32_SETFLAGS _IOW('f', 2, int)
- +#define FS_IOC32_GETVERSION _IOR('v', 1, int)
- +#define FS_IOC32_SETVERSION _IOW('v', 2, int)
- +
- +/*
- + * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
- + */
- +#define FS_SECRM_FL 0x00000001 /* Secure deletion */
- +#define FS_UNRM_FL 0x00000002 /* Undelete */
- +#define FS_COMPR_FL 0x00000004 /* Compress file */
- +#define FS_SYNC_FL 0x00000008 /* Synchronous updates */
- +#define FS_IMMUTABLE_FL 0x00000010 /* Immutable file */
- +#define FS_APPEND_FL 0x00000020 /* writes to file may only append */
- +#define FS_NODUMP_FL 0x00000040 /* do not dump file */
- +#define FS_NOATIME_FL 0x00000080 /* do not update atime */
- +/* Reserved for compression usage... */
- +#define FS_DIRTY_FL 0x00000100
- +#define FS_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
- +#define FS_NOCOMP_FL 0x00000400 /* Don't compress */
- +#define FS_ECOMPR_FL 0x00000800 /* Compression error */
- +/* End compression flags --- maybe not all used */
- +#define FS_BTREE_FL 0x00001000 /* btree format dir */
- +#define FS_INDEX_FL 0x00001000 /* hash-indexed directory */
- +#define FS_IMAGIC_FL 0x00002000 /* AFS directory */
- +#define FS_JOURNAL_DATA_FL 0x00004000 /* Reserved for ext3 */
- +#define FS_NOTAIL_FL 0x00008000 /* file tail should not be merged */
- +#define FS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */
- +#define FS_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
- +#define FS_EXTENT_FL 0x00080000 /* Extents */
- +#define FS_DIRECTIO_FL 0x00100000 /* Use direct i/o */
- +#define FS_NOCOW_FL 0x00800000 /* Do not cow file */
- +#define FS_RESERVED_FL 0x80000000 /* reserved for ext2 lib */
- +
- +#define FS_FL_USER_VISIBLE 0x0003DFFF /* User visible flags */
- +#define FS_FL_USER_MODIFIABLE 0x000380FF /* User modifiable flags */
- +
- +
- +#define SYNC_FILE_RANGE_WAIT_BEFORE 1
- +#define SYNC_FILE_RANGE_WRITE 2
- +#define SYNC_FILE_RANGE_WAIT_AFTER 4
- +
- +#endif /* _LINUX_FS_H */
- diff --git a/src/linux/hdreg.h b/src/linux/hdreg.h
- new file mode 100644
- index 0000000..5f23b03
- --- /dev/null
- +++ b/src/linux/hdreg.h
- @@ -0,0 +1,644 @@
- +#ifndef _LINUX_HDREG_H
- +#define _LINUX_HDREG_H
- +
- +#ifdef __linux__
- +#include <linux/types.h>
- +#endif
- +
- +/*
- + * Command Header sizes for IOCTL commands
- + */
- +
- +#define HDIO_DRIVE_CMD_HDR_SIZE (4 * sizeof(__u8))
- +#define HDIO_DRIVE_HOB_HDR_SIZE (8 * sizeof(__u8))
- +#define HDIO_DRIVE_TASK_HDR_SIZE (8 * sizeof(__u8))
- +
- +#define IDE_DRIVE_TASK_NO_DATA 0
- +#define IDE_DRIVE_TASK_INVALID -1
- +#define IDE_DRIVE_TASK_SET_XFER 1
- +#define IDE_DRIVE_TASK_IN 2
- +#define IDE_DRIVE_TASK_OUT 3
- +#define IDE_DRIVE_TASK_RAW_WRITE 4
- +
- +/*
- + * Define standard taskfile in/out register
- + */
- +#define IDE_TASKFILE_STD_IN_FLAGS 0xFE
- +#define IDE_HOB_STD_IN_FLAGS 0x3C
- +#define IDE_TASKFILE_STD_OUT_FLAGS 0xFE
- +#define IDE_HOB_STD_OUT_FLAGS 0x3C
- +
- +typedef unsigned char task_ioreg_t;
- +typedef unsigned long sata_ioreg_t;
- +
- +typedef union ide_reg_valid_s {
- + unsigned all : 16;
- + struct {
- + unsigned data : 1;
- + unsigned error_feature : 1;
- + unsigned sector : 1;
- + unsigned nsector : 1;
- + unsigned lcyl : 1;
- + unsigned hcyl : 1;
- + unsigned select : 1;
- + unsigned status_command : 1;
- +
- + unsigned data_hob : 1;
- + unsigned error_feature_hob : 1;
- + unsigned sector_hob : 1;
- + unsigned nsector_hob : 1;
- + unsigned lcyl_hob : 1;
- + unsigned hcyl_hob : 1;
- + unsigned select_hob : 1;
- + unsigned control_hob : 1;
- + } b;
- +} ide_reg_valid_t;
- +
- +typedef struct ide_task_request_s {
- + __u8 io_ports[8];
- + __u8 hob_ports[8]; /* bytes 6 and 7 are unused */
- + ide_reg_valid_t out_flags;
- + ide_reg_valid_t in_flags;
- + int data_phase;
- + int req_cmd;
- + unsigned long out_size;
- + unsigned long in_size;
- +} ide_task_request_t;
- +
- +typedef struct ide_ioctl_request_s {
- + ide_task_request_t *task_request;
- + unsigned char *out_buffer;
- + unsigned char *in_buffer;
- +} ide_ioctl_request_t;
- +
- +struct hd_drive_cmd_hdr {
- + __u8 command;
- + __u8 sector_number;
- + __u8 feature;
- + __u8 sector_count;
- +};
- +
- +typedef struct hd_drive_task_hdr {
- + __u8 data;
- + __u8 feature;
- + __u8 sector_count;
- + __u8 sector_number;
- + __u8 low_cylinder;
- + __u8 high_cylinder;
- + __u8 device_head;
- + __u8 command;
- +} task_struct_t;
- +
- +typedef struct hd_drive_hob_hdr {
- + __u8 data;
- + __u8 feature;
- + __u8 sector_count;
- + __u8 sector_number;
- + __u8 low_cylinder;
- + __u8 high_cylinder;
- + __u8 device_head;
- + __u8 control;
- +} hob_struct_t;
- +
- +#define TASKFILE_NO_DATA 0x0000
- +
- +#define TASKFILE_IN 0x0001
- +#define TASKFILE_MULTI_IN 0x0002
- +
- +#define TASKFILE_OUT 0x0004
- +#define TASKFILE_MULTI_OUT 0x0008
- +#define TASKFILE_IN_OUT 0x0010
- +
- +#define TASKFILE_IN_DMA 0x0020
- +#define TASKFILE_OUT_DMA 0x0040
- +#define TASKFILE_IN_DMAQ 0x0080
- +#define TASKFILE_OUT_DMAQ 0x0100
- +
- +#define TASKFILE_P_IN 0x0200
- +#define TASKFILE_P_OUT 0x0400
- +#define TASKFILE_P_IN_DMA 0x0800
- +#define TASKFILE_P_OUT_DMA 0x1000
- +#define TASKFILE_P_IN_DMAQ 0x2000
- +#define TASKFILE_P_OUT_DMAQ 0x4000
- +#define TASKFILE_48 0x8000
- +#define TASKFILE_INVALID 0x7fff
- +
- +/* ATA/ATAPI Commands pre T13 Spec */
- +#define WIN_NOP 0x00
- +/*
- + * 0x01->0x02 Reserved
- + */
- +#define CFA_REQ_EXT_ERROR_CODE 0x03 /* CFA Request Extended Error Code */
- +/*
- + * 0x04->0x07 Reserved
- + */
- +#define WIN_SRST 0x08 /* ATAPI soft reset command */
- +#define WIN_DEVICE_RESET 0x08
- +/*
- + * 0x09->0x0F Reserved
- + */
- +#define WIN_RECAL 0x10
- +#define WIN_RESTORE WIN_RECAL
- +/*
- + * 0x10->0x1F Reserved
- + */
- +#define WIN_READ 0x20 /* 28-Bit */
- +#define WIN_READ_ONCE 0x21 /* 28-Bit without retries */
- +#define WIN_READ_LONG 0x22 /* 28-Bit */
- +#define WIN_READ_LONG_ONCE 0x23 /* 28-Bit without retries */
- +#define WIN_READ_EXT 0x24 /* 48-Bit */
- +#define WIN_READDMA_EXT 0x25 /* 48-Bit */
- +#define WIN_READDMA_QUEUED_EXT 0x26 /* 48-Bit */
- +#define WIN_READ_NATIVE_MAX_EXT 0x27 /* 48-Bit */
- +/*
- + * 0x28
- + */
- +#define WIN_MULTREAD_EXT 0x29 /* 48-Bit */
- +/*
- + * 0x2A->0x2F Reserved
- + */
- +#define WIN_WRITE 0x30 /* 28-Bit */
- +#define WIN_WRITE_ONCE 0x31 /* 28-Bit without retries */
- +#define WIN_WRITE_LONG 0x32 /* 28-Bit */
- +#define WIN_WRITE_LONG_ONCE 0x33 /* 28-Bit without retries */
- +#define WIN_WRITE_EXT 0x34 /* 48-Bit */
- +#define WIN_WRITEDMA_EXT 0x35 /* 48-Bit */
- +#define WIN_WRITEDMA_QUEUED_EXT 0x36 /* 48-Bit */
- +#define WIN_SET_MAX_EXT 0x37 /* 48-Bit */
- +#define CFA_WRITE_SECT_WO_ERASE 0x38 /* CFA Write Sectors without erase */
- +#define WIN_MULTWRITE_EXT 0x39 /* 48-Bit */
- +/*
- + * 0x3A->0x3B Reserved
- + */
- +#define WIN_WRITE_VERIFY 0x3C /* 28-Bit */
- +/*
- + * 0x3D->0x3F Reserved
- + */
- +#define WIN_VERIFY 0x40 /* 28-Bit - Read Verify Sectors */
- +#define WIN_VERIFY_ONCE 0x41 /* 28-Bit - without retries */
- +#define WIN_VERIFY_EXT 0x42 /* 48-Bit */
- +/*
- + * 0x43->0x4F Reserved
- + */
- +#define WIN_FORMAT 0x50
- +/*
- + * 0x51->0x5F Reserved
- + */
- +#define WIN_INIT 0x60
- +/*
- + * 0x61->0x5F Reserved
- + */
- +#define WIN_SEEK 0x70 /* 0x70-0x7F Reserved */
- +
- +#define CFA_TRANSLATE_SECTOR 0x87 /* CFA Translate Sector */
- +#define WIN_DIAGNOSE 0x90
- +#define WIN_SPECIFY 0x91 /* set drive geometry translation */
- +#define WIN_DOWNLOAD_MICROCODE 0x92
- +#define WIN_STANDBYNOW2 0x94
- +#define WIN_STANDBY2 0x96
- +#define WIN_SETIDLE2 0x97
- +#define WIN_CHECKPOWERMODE2 0x98
- +#define WIN_SLEEPNOW2 0x99
- +/*
- + * 0x9A VENDOR
- + */
- +#define WIN_PACKETCMD 0xA0 /* Send a packet command. */
- +#define WIN_PIDENTIFY 0xA1 /* identify ATAPI device */
- +#define WIN_QUEUED_SERVICE 0xA2
- +#define WIN_SMART 0xB0 /* self-monitoring and reporting */
- +#define CFA_ERASE_SECTORS 0xC0
- +#define WIN_MULTREAD 0xC4 /* read sectors using multiple mode*/
- +#define WIN_MULTWRITE 0xC5 /* write sectors using multiple mode */
- +#define WIN_SETMULT 0xC6 /* enable/disable multiple mode */
- +#define WIN_READDMA_QUEUED 0xC7 /* read sectors using Queued DMA transfers */
- +#define WIN_READDMA 0xC8 /* read sectors using DMA transfers */
- +#define WIN_READDMA_ONCE 0xC9 /* 28-Bit - without retries */
- +#define WIN_WRITEDMA 0xCA /* write sectors using DMA transfers */
- +#define WIN_WRITEDMA_ONCE 0xCB /* 28-Bit - without retries */
- +#define WIN_WRITEDMA_QUEUED 0xCC /* write sectors using Queued DMA transfers */
- +#define CFA_WRITE_MULTI_WO_ERASE 0xCD /* CFA Write multiple without erase */
- +#define WIN_GETMEDIASTATUS 0xDA
- +#define WIN_ACKMEDIACHANGE 0xDB /* ATA-1, ATA-2 vendor */
- +#define WIN_POSTBOOT 0xDC
- +#define WIN_PREBOOT 0xDD
- +#define WIN_DOORLOCK 0xDE /* lock door on removable drives */
- +#define WIN_DOORUNLOCK 0xDF /* unlock door on removable drives */
- +#define WIN_STANDBYNOW1 0xE0
- +#define WIN_IDLEIMMEDIATE 0xE1 /* force drive to become "ready" */
- +#define WIN_STANDBY 0xE2 /* Set device in Standby Mode */
- +#define WIN_SETIDLE1 0xE3
- +#define WIN_READ_BUFFER 0xE4 /* force read only 1 sector */
- +#define WIN_CHECKPOWERMODE1 0xE5
- +#define WIN_SLEEPNOW1 0xE6
- +#define WIN_FLUSH_CACHE 0xE7
- +#define WIN_WRITE_BUFFER 0xE8 /* force write only 1 sector */
- +#define WIN_WRITE_SAME 0xE9 /* read ata-2 to use */
- + /* SET_FEATURES 0x22 or 0xDD */
- +#define WIN_FLUSH_CACHE_EXT 0xEA /* 48-Bit */
- +#define WIN_IDENTIFY 0xEC /* ask drive to identify itself */
- +#define WIN_MEDIAEJECT 0xED
- +#define WIN_IDENTIFY_DMA 0xEE /* same as WIN_IDENTIFY, but DMA */
- +#define WIN_SETFEATURES 0xEF /* set special drive features */
- +#define EXABYTE_ENABLE_NEST 0xF0
- +#define WIN_SECURITY_SET_PASS 0xF1
- +#define WIN_SECURITY_UNLOCK 0xF2
- +#define WIN_SECURITY_ERASE_PREPARE 0xF3
- +#define WIN_SECURITY_ERASE_UNIT 0xF4
- +#define WIN_SECURITY_FREEZE_LOCK 0xF5
- +#define WIN_SECURITY_DISABLE 0xF6
- +#define WIN_READ_NATIVE_MAX 0xF8 /* return the native maximum address */
- +#define WIN_SET_MAX 0xF9
- +#define DISABLE_SEAGATE 0xFB
- +
- +/* WIN_SMART sub-commands */
- +
- +#define SMART_READ_VALUES 0xD0
- +#define SMART_READ_THRESHOLDS 0xD1
- +#define SMART_AUTOSAVE 0xD2
- +#define SMART_SAVE 0xD3
- +#define SMART_IMMEDIATE_OFFLINE 0xD4
- +#define SMART_READ_LOG_SECTOR 0xD5
- +#define SMART_WRITE_LOG_SECTOR 0xD6
- +#define SMART_WRITE_THRESHOLDS 0xD7
- +#define SMART_ENABLE 0xD8
- +#define SMART_DISABLE 0xD9
- +#define SMART_STATUS 0xDA
- +#define SMART_AUTO_OFFLINE 0xDB
- +
- +/* Password used in TF4 & TF5 executing SMART commands */
- +
- +#define SMART_LCYL_PASS 0x4F
- +#define SMART_HCYL_PASS 0xC2
- +
- +/* WIN_SETFEATURES sub-commands */
- +#define SETFEATURES_EN_8BIT 0x01 /* Enable 8-Bit Transfers */
- +#define SETFEATURES_EN_WCACHE 0x02 /* Enable write cache */
- +#define SETFEATURES_DIS_DEFECT 0x04 /* Disable Defect Management */
- +#define SETFEATURES_EN_APM 0x05 /* Enable advanced power management */
- +#define SETFEATURES_EN_SAME_R 0x22 /* for a region ATA-1 */
- +#define SETFEATURES_DIS_MSN 0x31 /* Disable Media Status Notification */
- +#define SETFEATURES_DIS_RETRY 0x33 /* Disable Retry */
- +#define SETFEATURES_EN_AAM 0x42 /* Enable Automatic Acoustic Management */
- +#define SETFEATURES_RW_LONG 0x44 /* Set Length of VS bytes */
- +#define SETFEATURES_SET_CACHE 0x54 /* Set Cache segments to SC Reg. Val */
- +#define SETFEATURES_DIS_RLA 0x55 /* Disable read look-ahead feature */
- +#define SETFEATURES_EN_RI 0x5D /* Enable release interrupt */
- +#define SETFEATURES_EN_SI 0x5E /* Enable SERVICE interrupt */
- +#define SETFEATURES_DIS_RPOD 0x66 /* Disable reverting to power on defaults */
- +#define SETFEATURES_DIS_ECC 0x77 /* Disable ECC byte count */
- +#define SETFEATURES_DIS_8BIT 0x81 /* Disable 8-Bit Transfers */
- +#define SETFEATURES_DIS_WCACHE 0x82 /* Disable write cache */
- +#define SETFEATURES_EN_DEFECT 0x84 /* Enable Defect Management */
- +#define SETFEATURES_DIS_APM 0x85 /* Disable advanced power management */
- +#define SETFEATURES_EN_ECC 0x88 /* Enable ECC byte count */
- +#define SETFEATURES_EN_MSN 0x95 /* Enable Media Status Notification */
- +#define SETFEATURES_EN_RETRY 0x99 /* Enable Retry */
- +#define SETFEATURES_EN_RLA 0xAA /* Enable read look-ahead feature */
- +#define SETFEATURES_PREFETCH 0xAB /* Sets drive prefetch value */
- +#define SETFEATURES_EN_REST 0xAC /* ATA-1 */
- +#define SETFEATURES_4B_RW_LONG 0xBB /* Set Length of 4 bytes */
- +#define SETFEATURES_DIS_AAM 0xC2 /* Disable Automatic Acoustic Management */
- +#define SETFEATURES_EN_RPOD 0xCC /* Enable reverting to power on defaults */
- +#define SETFEATURES_DIS_RI 0xDD /* Disable release interrupt ATAPI */
- +#define SETFEATURES_EN_SAME_M 0xDD /* for a entire device ATA-1 */
- +#define SETFEATURES_DIS_SI 0xDE /* Disable SERVICE interrupt ATAPI */
- +
- +/* WIN_SECURITY sub-commands */
- +
- +#define SECURITY_SET_PASSWORD 0xBA
- +#define SECURITY_UNLOCK 0xBB
- +#define SECURITY_ERASE_PREPARE 0xBC
- +#define SECURITY_ERASE_UNIT 0xBD
- +#define SECURITY_FREEZE_LOCK 0xBE
- +#define SECURITY_DISABLE_PASSWORD 0xBF
- +
- +struct hd_geometry {
- + unsigned char heads;
- + unsigned char sectors;
- + unsigned short cylinders;
- + unsigned long start;
- +};
- +
- +/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x030n/0x031n */
- +#define HDIO_GETGEO 0x0301 /* get device geometry */
- +#define HDIO_GET_UNMASKINTR 0x0302 /* get current unmask setting */
- +#define HDIO_GET_MULTCOUNT 0x0304 /* get current IDE blockmode setting */
- +#define HDIO_GET_QDMA 0x0305 /* get use-qdma flag */
- +
- +#define HDIO_SET_XFER 0x0306 /* set transfer rate via proc */
- +
- +#define HDIO_OBSOLETE_IDENTITY 0x0307 /* OBSOLETE, DO NOT USE: returns 142 bytes */
- +#define HDIO_GET_KEEPSETTINGS 0x0308 /* get keep-settings-on-reset flag */
- +#define HDIO_GET_32BIT 0x0309 /* get current io_32bit setting */
- +#define HDIO_GET_NOWERR 0x030a /* get ignore-write-error flag */
- +#define HDIO_GET_DMA 0x030b /* get use-dma flag */
- +#define HDIO_GET_NICE 0x030c /* get nice flags */
- +#define HDIO_GET_IDENTITY 0x030d /* get IDE identification info */
- +#define HDIO_GET_WCACHE 0x030e /* get write cache mode on|off */
- +#define HDIO_GET_ACOUSTIC 0x030f /* get acoustic value */
- +#define HDIO_GET_ADDRESS 0x0310 /* */
- +
- +#define HDIO_GET_BUSSTATE 0x031a /* get the bus state of the hwif */
- +#define HDIO_TRISTATE_HWIF 0x031b /* execute a channel tristate */
- +#define HDIO_DRIVE_RESET 0x031c /* execute a device reset */
- +#define HDIO_DRIVE_TASKFILE 0x031d /* execute raw taskfile */
- +#define HDIO_DRIVE_TASK 0x031e /* execute task and special drive command */
- +#define HDIO_DRIVE_CMD 0x031f /* execute a special drive command */
- +#define HDIO_DRIVE_CMD_AEB HDIO_DRIVE_TASK
- +
- +/* hd/ide ctl's that pass (arg) non-ptr values are numbered 0x032n/0x033n */
- +#define HDIO_SET_MULTCOUNT 0x0321 /* change IDE blockmode */
- +#define HDIO_SET_UNMASKINTR 0x0322 /* permit other irqs during I/O */
- +#define HDIO_SET_KEEPSETTINGS 0x0323 /* keep ioctl settings on reset */
- +#define HDIO_SET_32BIT 0x0324 /* change io_32bit flags */
- +#define HDIO_SET_NOWERR 0x0325 /* change ignore-write-error flag */
- +#define HDIO_SET_DMA 0x0326 /* change use-dma flag */
- +#define HDIO_SET_PIO_MODE 0x0327 /* reconfig interface to new speed */
- +#define HDIO_SCAN_HWIF 0x0328 /* register and (re)scan interface */
- +#define HDIO_UNREGISTER_HWIF 0x032a /* unregister interface */
- +#define HDIO_SET_NICE 0x0329 /* set nice flags */
- +#define HDIO_SET_WCACHE 0x032b /* change write cache enable-disable */
- +#define HDIO_SET_ACOUSTIC 0x032c /* change acoustic behavior */
- +#define HDIO_SET_BUSSTATE 0x032d /* set the bus state of the hwif */
- +#define HDIO_SET_QDMA 0x032e /* change use-qdma flag */
- +#define HDIO_SET_ADDRESS 0x032f /* change lba addressing modes */
- +
- +/* bus states */
- +enum {
- + BUSSTATE_OFF = 0,
- + BUSSTATE_ON,
- + BUSSTATE_TRISTATE
- +};
- +
- +/* hd/ide ctl's that pass (arg) ptrs to user space are numbered 0x033n/0x033n */
- +/* 0x330 is reserved - used to be HDIO_GETGEO_BIG */
- +/* 0x331 is reserved - used to be HDIO_GETGEO_BIG_RAW */
- +/* 0x338 is reserved - used to be HDIO_SET_IDE_SCSI */
- +/* 0x339 is reserved - used to be HDIO_SET_SCSI_IDE */
- +
- +#define __NEW_HD_DRIVE_ID
- +
- +/*
- + * Structure returned by HDIO_GET_IDENTITY, as per ANSI NCITS ATA6 rev.1b spec.
- + *
- + * If you change something here, please remember to update fix_driveid() in
- + * ide/probe.c.
- + */
- +struct hd_driveid {
- + unsigned short config; /* lots of obsolete bit flags */
- + unsigned short cyls; /* Obsolete, "physical" cyls */
- + unsigned short reserved2; /* reserved (word 2) */
- + unsigned short heads; /* Obsolete, "physical" heads */
- + unsigned short track_bytes; /* unformatted bytes per track */
- + unsigned short sector_bytes; /* unformatted bytes per sector */
- + unsigned short sectors; /* Obsolete, "physical" sectors per track */
- + unsigned short vendor0; /* vendor unique */
- + unsigned short vendor1; /* vendor unique */
- + unsigned short vendor2; /* Retired vendor unique */
- + unsigned char serial_no[20]; /* 0 = not_specified */
- + unsigned short buf_type; /* Retired */
- + unsigned short buf_size; /* Retired, 512 byte increments
- + * 0 = not_specified
- + */
- + unsigned short ecc_bytes; /* for r/w long cmds; 0 = not_specified */
- + unsigned char fw_rev[8]; /* 0 = not_specified */
- + unsigned char model[40]; /* 0 = not_specified */
- + unsigned char max_multsect; /* 0=not_implemented */
- + unsigned char vendor3; /* vendor unique */
- + unsigned short dword_io; /* 0=not_implemented; 1=implemented */
- + unsigned char vendor4; /* vendor unique */
- + unsigned char capability; /* (upper byte of word 49)
- + * 3: IORDYsup
- + * 2: IORDYsw
- + * 1: LBA
- + * 0: DMA
- + */
- + unsigned short reserved50; /* reserved (word 50) */
- + unsigned char vendor5; /* Obsolete, vendor unique */
- + unsigned char tPIO; /* Obsolete, 0=slow, 1=medium, 2=fast */
- + unsigned char vendor6; /* Obsolete, vendor unique */
- + unsigned char tDMA; /* Obsolete, 0=slow, 1=medium, 2=fast */
- + unsigned short field_valid; /* (word 53)
- + * 2: ultra_ok word 88
- + * 1: eide_ok words 64-70
- + * 0: cur_ok words 54-58
- + */
- + unsigned short cur_cyls; /* Obsolete, logical cylinders */
- + unsigned short cur_heads; /* Obsolete, l heads */
- + unsigned short cur_sectors; /* Obsolete, l sectors per track */
- + unsigned short cur_capacity0; /* Obsolete, l total sectors on drive */
- + unsigned short cur_capacity1; /* Obsolete, (2 words, misaligned int) */
- + unsigned char multsect; /* current multiple sector count */
- + unsigned char multsect_valid; /* when (bit0==1) multsect is ok */
- + unsigned int lba_capacity; /* Obsolete, total number of sectors */
- + unsigned short dma_1word; /* Obsolete, single-word dma info */
- + unsigned short dma_mword; /* multiple-word dma info */
- + unsigned short eide_pio_modes; /* bits 0:mode3 1:mode4 */
- + unsigned short eide_dma_min; /* min mword dma cycle time (ns) */
- + unsigned short eide_dma_time; /* recommended mword dma cycle time (ns) */
- + unsigned short eide_pio; /* min cycle time (ns), no IORDY */
- + unsigned short eide_pio_iordy; /* min cycle time (ns), with IORDY */
- + unsigned short words69_70[2]; /* reserved words 69-70
- + * future command overlap and queuing
- + */
- + unsigned short words71_74[4]; /* reserved words 71-74
- + * for IDENTIFY PACKET DEVICE command
- + */
- + unsigned short queue_depth; /* (word 75)
- + * 15:5 reserved
- + * 4:0 Maximum queue depth -1
- + */
- + unsigned short words76_79[4]; /* reserved words 76-79 */
- + unsigned short major_rev_num; /* (word 80) */
- + unsigned short minor_rev_num; /* (word 81) */
- + unsigned short command_set_1; /* (word 82) supported
- + * 15: Obsolete
- + * 14: NOP command
- + * 13: READ_BUFFER
- + * 12: WRITE_BUFFER
- + * 11: Obsolete
- + * 10: Host Protected Area
- + * 9: DEVICE Reset
- + * 8: SERVICE Interrupt
- + * 7: Release Interrupt
- + * 6: look-ahead
- + * 5: write cache
- + * 4: PACKET Command
- + * 3: Power Management Feature Set
- + * 2: Removable Feature Set
- + * 1: Security Feature Set
- + * 0: SMART Feature Set
- + */
- + unsigned short command_set_2; /* (word 83)
- + * 15: Shall be ZERO
- + * 14: Shall be ONE
- + * 13: FLUSH CACHE EXT
- + * 12: FLUSH CACHE
- + * 11: Device Configuration Overlay
- + * 10: 48-bit Address Feature Set
- + * 9: Automatic Acoustic Management
- + * 8: SET MAX security
- + * 7: reserved 1407DT PARTIES
- + * 6: SetF sub-command Power-Up
- + * 5: Power-Up in Standby Feature Set
- + * 4: Removable Media Notification
- + * 3: APM Feature Set
- + * 2: CFA Feature Set
- + * 1: READ/WRITE DMA QUEUED
- + * 0: Download MicroCode
- + */
- + unsigned short cfsse; /* (word 84)
- + * cmd set-feature supported extensions
- + * 15: Shall be ZERO
- + * 14: Shall be ONE
- + * 13:6 reserved
- + * 5: General Purpose Logging
- + * 4: Streaming Feature Set
- + * 3: Media Card Pass Through
- + * 2: Media Serial Number Valid
- + * 1: SMART selt-test supported
- + * 0: SMART error logging
- + */
- + unsigned short cfs_enable_1; /* (word 85)
- + * command set-feature enabled
- + * 15: Obsolete
- + * 14: NOP command
- + * 13: READ_BUFFER
- + * 12: WRITE_BUFFER
- + * 11: Obsolete
- + * 10: Host Protected Area
- + * 9: DEVICE Reset
- + * 8: SERVICE Interrupt
- + * 7: Release Interrupt
- + * 6: look-ahead
- + * 5: write cache
- + * 4: PACKET Command
- + * 3: Power Management Feature Set
- + * 2: Removable Feature Set
- + * 1: Security Feature Set
- + * 0: SMART Feature Set
- + */
- + unsigned short cfs_enable_2; /* (word 86)
- + * command set-feature enabled
- + * 15: Shall be ZERO
- + * 14: Shall be ONE
- + * 13: FLUSH CACHE EXT
- + * 12: FLUSH CACHE
- + * 11: Device Configuration Overlay
- + * 10: 48-bit Address Feature Set
- + * 9: Automatic Acoustic Management
- + * 8: SET MAX security
- + * 7: reserved 1407DT PARTIES
- + * 6: SetF sub-command Power-Up
- + * 5: Power-Up in Standby Feature Set
- + * 4: Removable Media Notification
- + * 3: APM Feature Set
- + * 2: CFA Feature Set
- + * 1: READ/WRITE DMA QUEUED
- + * 0: Download MicroCode
- + */
- + unsigned short csf_default; /* (word 87)
- + * command set-feature default
- + * 15: Shall be ZERO
- + * 14: Shall be ONE
- + * 13:6 reserved
- + * 5: General Purpose Logging enabled
- + * 4: Valid CONFIGURE STREAM executed
- + * 3: Media Card Pass Through enabled
- + * 2: Media Serial Number Valid
- + * 1: SMART selt-test supported
- + * 0: SMART error logging
- + */
- + unsigned short dma_ultra; /* (word 88) */
- + unsigned short trseuc; /* time required for security erase */
- + unsigned short trsEuc; /* time required for enhanced erase */
- + unsigned short CurAPMvalues; /* current APM values */
- + unsigned short mprc; /* master password revision code */
- + unsigned short hw_config; /* hardware config (word 93)
- + * 15: Shall be ZERO
- + * 14: Shall be ONE
- + * 13:
- + * 12:
- + * 11:
- + * 10:
- + * 9:
- + * 8:
- + * 7:
- + * 6:
- + * 5:
- + * 4:
- + * 3:
- + * 2:
- + * 1:
- + * 0: Shall be ONE
- + */
- + unsigned short acoustic; /* (word 94)
- + * 15:8 Vendor's recommended value
- + * 7:0 current value
- + */
- + unsigned short msrqs; /* min stream request size */
- + unsigned short sxfert; /* stream transfer time */
- + unsigned short sal; /* stream access latency */
- + unsigned int spg; /* stream performance granularity */
- + unsigned long long lba_capacity_2;/* 48-bit total number of sectors */
- + unsigned short words104_125[22];/* reserved words 104-125 */
- + unsigned short last_lun; /* (word 126) */
- + unsigned short word127; /* (word 127) Feature Set
- + * Removable Media Notification
- + * 15:2 reserved
- + * 1:0 00 = not supported
- + * 01 = supported
- + * 10 = reserved
- + * 11 = reserved
- + */
- + unsigned short dlf; /* (word 128)
- + * device lock function
- + * 15:9 reserved
- + * 8 security level 1:max 0:high
- + * 7:6 reserved
- + * 5 enhanced erase
- + * 4 expire
- + * 3 frozen
- + * 2 locked
- + * 1 en/disabled
- + * 0 capability
- + */
- + unsigned short csfo; /* (word 129)
- + * current set features options
- + * 15:4 reserved
- + * 3: auto reassign
- + * 2: reverting
- + * 1: read-look-ahead
- + * 0: write cache
- + */
- + unsigned short words130_155[26];/* reserved vendor words 130-155 */
- + unsigned short word156; /* reserved vendor word 156 */
- + unsigned short words157_159[3];/* reserved vendor words 157-159 */
- + unsigned short cfa_power; /* (word 160) CFA Power Mode
- + * 15 word 160 supported
- + * 14 reserved
- + * 13
- + * 12
- + * 11:0
- + */
- + unsigned short words161_175[15];/* Reserved for CFA */
- + unsigned short words176_205[30];/* Current Media Serial Number */
- + unsigned short words206_254[49];/* reserved words 206-254 */
- + unsigned short integrity_word; /* (word 255)
- + * 15:8 Checksum
- + * 7:0 Signature
- + */
- +};
- +
- +/*
- + * IDE "nice" flags. These are used on a per drive basis to determine
- + * when to be nice and give more bandwidth to the other devices which
- + * share the same IDE bus.
- + */
- +#define IDE_NICE_DSC_OVERLAP (0) /* per the DSC overlap protocol */
- +#define IDE_NICE_ATAPI_OVERLAP (1) /* not supported yet */
- +#define IDE_NICE_1 (3) /* when probably won't affect us much */
- +#define IDE_NICE_0 (2) /* when sure that it won't affect us */
- +#define IDE_NICE_2 (4) /* when we know it's on our expense */
- +
- +#endif /* _LINUX_HDREG_H */
- diff --git a/src/linux/magic.h b/src/linux/magic.h
- new file mode 100644
- index 0000000..77c6031
- --- /dev/null
- +++ b/src/linux/magic.h
- @@ -0,0 +1,76 @@
- +#ifndef __LINUX_MAGIC_H__
- +#define __LINUX_MAGIC_H__
- +
- +#define ADFS_SUPER_MAGIC 0xadf5
- +#define AFFS_SUPER_MAGIC 0xadff
- +#define AFS_SUPER_MAGIC 0x5346414F
- +#define AUTOFS_SUPER_MAGIC 0x0187
- +#define CODA_SUPER_MAGIC 0x73757245
- +#define CRAMFS_MAGIC 0x28cd3d45 /* some random number */
- +#define CRAMFS_MAGIC_WEND 0x453dcd28 /* magic number with the wrong endianess */
- +#define DEBUGFS_MAGIC 0x64626720
- +#define SECURITYFS_MAGIC 0x73636673
- +#define SELINUX_MAGIC 0xf97cff8c
- +#define SMACK_MAGIC 0x43415d53 /* "SMAC" */
- +#define RAMFS_MAGIC 0x858458f6 /* some random number */
- +#define TMPFS_MAGIC 0x01021994
- +#define HUGETLBFS_MAGIC 0x958458f6 /* some random number */
- +#define SQUASHFS_MAGIC 0x73717368
- +#define ECRYPTFS_SUPER_MAGIC 0xf15f
- +#define EFS_SUPER_MAGIC 0x414A53
- +#define EXT2_SUPER_MAGIC 0xEF53
- +#define EXT3_SUPER_MAGIC 0xEF53
- +#define XENFS_SUPER_MAGIC 0xabba1974
- +#define EXT4_SUPER_MAGIC 0xEF53
- +#define BTRFS_SUPER_MAGIC 0x9123683E
- +#define NILFS_SUPER_MAGIC 0x3434
- +#define F2FS_SUPER_MAGIC 0xF2F52010
- +#define HPFS_SUPER_MAGIC 0xf995e849
- +#define ISOFS_SUPER_MAGIC 0x9660
- +#define JFFS2_SUPER_MAGIC 0x72b6
- +#define PSTOREFS_MAGIC 0x6165676C
- +#define EFIVARFS_MAGIC 0xde5e81e4
- +#define HOSTFS_SUPER_MAGIC 0x00c0ffee
- +
- +#define MINIX_SUPER_MAGIC 0x137F /* minix v1 fs, 14 char names */
- +#define MINIX_SUPER_MAGIC2 0x138F /* minix v1 fs, 30 char names */
- +#define MINIX2_SUPER_MAGIC 0x2468 /* minix v2 fs, 14 char names */
- +#define MINIX2_SUPER_MAGIC2 0x2478 /* minix v2 fs, 30 char names */
- +#define MINIX3_SUPER_MAGIC 0x4d5a /* minix v3 fs, 60 char names */
- +
- +#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
- +#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
- +#define NFS_SUPER_MAGIC 0x6969
- +#define OPENPROM_SUPER_MAGIC 0x9fa1
- +#define QNX4_SUPER_MAGIC 0x002f /* qnx4 fs detection */
- +#define QNX6_SUPER_MAGIC 0x68191122 /* qnx6 fs detection */
- +
- +#define REISERFS_SUPER_MAGIC 0x52654973 /* used by gcc */
- + /* used by file system utilities that
- + look at the superblock, etc. */
- +#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs"
- +#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs"
- +#define REISER2FS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs"
- +
- +#define SMB_SUPER_MAGIC 0x517B
- +#define CGROUP_SUPER_MAGIC 0x27e0eb
- +
- +
- +#define STACK_END_MAGIC 0x57AC6E9D
- +
- +#define V9FS_MAGIC 0x01021997
- +
- +#define BDEVFS_MAGIC 0x62646576
- +#define BINFMTFS_MAGIC 0x42494e4d
- +#define DEVPTS_SUPER_MAGIC 0x1cd1
- +#define FUTEXFS_SUPER_MAGIC 0xBAD1DEA
- +#define PIPEFS_MAGIC 0x50495045
- +#define PROC_SUPER_MAGIC 0x9fa0
- +#define SOCKFS_MAGIC 0x534F434B
- +#define SYSFS_MAGIC 0x62656572
- +#define USBDEVICE_SUPER_MAGIC 0x9fa2
- +#define MTD_INODE_FS_MAGIC 0x11307854
- +#define ANON_INODE_FS_MAGIC 0x09041934
- +#define BTRFS_TEST_MAGIC 0x73727279
- +
- +#endif /* __LINUX_MAGIC_H__ */
- diff --git a/src/linux/msdos_fs.h b/src/linux/msdos_fs.h
- new file mode 100644
- index 0000000..635d905
- --- /dev/null
- +++ b/src/linux/msdos_fs.h
- @@ -0,0 +1,201 @@
- +#ifndef _LINUX_MSDOS_FS_H
- +#define _LINUX_MSDOS_FS_H
- +
- +#ifdef __linux__
- +#include <linux/types.h>
- +#include <asm/byteorder.h>
- +#endif
- +#include "magic.h"
- +
- +/*
- + * The MS-DOS filesystem constants/structures
- + */
- +
- +#define SECTOR_SIZE 512 /* sector size (bytes) */
- +#define SECTOR_BITS 9 /* log2(SECTOR_SIZE) */
- +#define MSDOS_DPB (MSDOS_DPS) /* dir entries per block */
- +#define MSDOS_DPB_BITS 4 /* log2(MSDOS_DPB) */
- +#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry))
- +#define MSDOS_DPS_BITS 4 /* log2(MSDOS_DPS) */
- +#define MSDOS_LONGNAME 256 /* maximum name length */
- +#define CF_LE_W(v) le16_to_cpu(v)
- +#define CF_LE_L(v) le32_to_cpu(v)
- +#define CT_LE_W(v) cpu_to_le16(v)
- +#define CT_LE_L(v) cpu_to_le32(v)
- +
- +#define MSDOS_ROOT_INO 1 /* The root inode number */
- +#define MSDOS_FSINFO_INO 2 /* Used for managing the FSINFO block */
- +
- +#define MSDOS_DIR_BITS 5 /* log2(sizeof(struct msdos_dir_entry)) */
- +
- +/* directory limit */
- +#define FAT_MAX_DIR_ENTRIES (65536)
- +#define FAT_MAX_DIR_SIZE (FAT_MAX_DIR_ENTRIES << MSDOS_DIR_BITS)
- +
- +#define ATTR_NONE 0 /* no attribute bits */
- +#define ATTR_RO 1 /* read-only */
- +#define ATTR_HIDDEN 2 /* hidden */
- +#define ATTR_SYS 4 /* system */
- +#define ATTR_VOLUME 8 /* volume label */
- +#define ATTR_DIR 16 /* directory */
- +#define ATTR_ARCH 32 /* archived */
- +
- +/* attribute bits that are copied "as is" */
- +#define ATTR_UNUSED (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN)
- +/* bits that are used by the Windows 95/Windows NT extended FAT */
- +#define ATTR_EXT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME)
- +
- +#define CASE_LOWER_BASE 8 /* base is lower case */
- +#define CASE_LOWER_EXT 16 /* extension is lower case */
- +
- +#define DELETED_FLAG 0xe5 /* marks file as deleted when in name[0] */
- +#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG)
- +
- +#define FAT_LFN_LEN 255 /* maximum long name length */
- +#define MSDOS_NAME 11 /* maximum name length */
- +#define MSDOS_SLOTS 21 /* max # of slots for short and long names */
- +#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */
- +#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */
- +
- +#define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \
- + MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x))
- +
- +/* start of data cluster's entry (number of reserved clusters) */
- +#define FAT_START_ENT 2
- +
- +/* maximum number of clusters */
- +#define MAX_FAT12 0xFF4
- +#define MAX_FAT16 0xFFF4
- +#define MAX_FAT32 0x0FFFFFF6
- +#define MAX_FAT(s) (MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : \
- + MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12)
- +
- +/* bad cluster mark */
- +#define BAD_FAT12 0xFF7
- +#define BAD_FAT16 0xFFF7
- +#define BAD_FAT32 0x0FFFFFF7
- +
- +/* standard EOF */
- +#define EOF_FAT12 0xFFF
- +#define EOF_FAT16 0xFFFF
- +#define EOF_FAT32 0x0FFFFFFF
- +
- +#define FAT_ENT_FREE (0)
- +#define FAT_ENT_BAD (BAD_FAT32)
- +#define FAT_ENT_EOF (EOF_FAT32)
- +
- +#define FAT_FSINFO_SIG1 0x41615252
- +#define FAT_FSINFO_SIG2 0x61417272
- +#define IS_FSINFO(x) (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \
- + && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2)
- +
- +#define FAT_STATE_DIRTY 0x01
- +
- +struct __fat_dirent {
- + long d_ino;
- + long d_off;
- + unsigned short d_reclen;
- + char d_name[256]; /* We must not include limits.h! */
- +};
- +
- +/*
- + * ioctl commands
- + */
- +#define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct __fat_dirent[2])
- +#define VFAT_IOCTL_READDIR_SHORT _IOR('r', 2, struct __fat_dirent[2])
- +/* <linux/videotext.h> has used 0x72 ('r') in collision, so skip a few */
- +#define FAT_IOCTL_GET_ATTRIBUTES _IOR('r', 0x10, __u32)
- +#define FAT_IOCTL_SET_ATTRIBUTES _IOW('r', 0x11, __u32)
- +/*Android kernel has used 0x12, so we use 0x13*/
- +#define FAT_IOCTL_GET_VOLUME_ID _IOR('r', 0x13, __u32)
- +
- +struct fat_boot_sector {
- + __u8 ignored[3]; /* Boot strap short or near jump */
- + __u8 system_id[8]; /* Name - can be used to special case
- + partition manager volumes */
- + __u8 sector_size[2]; /* bytes per logical sector */
- + __u8 sec_per_clus; /* sectors/cluster */
- + __le16 reserved; /* reserved sectors */
- + __u8 fats; /* number of FATs */
- + __u8 dir_entries[2]; /* root directory entries */
- + __u8 sectors[2]; /* number of sectors */
- + __u8 media; /* media code */
- + __le16 fat_length; /* sectors/FAT */
- + __le16 secs_track; /* sectors per track */
- + __le16 heads; /* number of heads */
- + __le32 hidden; /* hidden sectors (unused) */
- + __le32 total_sect; /* number of sectors (if sectors == 0) */
- +
- + union {
- + struct {
- + /* Extended BPB Fields for FAT16 */
- + __u8 drive_number; /* Physical drive number */
- + __u8 state; /* undocumented, but used
- + for mount state. */
- + __u8 signature; /* extended boot signature */
- + __u8 vol_id[4]; /* volume ID */
- + __u8 vol_label[11]; /* volume label */
- + __u8 fs_type[8]; /* file system type */
- + /* other fiealds are not added here */
- + } fat16;
- +
- + struct {
- + /* only used by FAT32 */
- + __le32 length; /* sectors/FAT */
- + __le16 flags; /* bit 8: fat mirroring,
- + low 4: active fat */
- + __u8 version[2]; /* major, minor filesystem
- + version */
- + __le32 root_cluster; /* first cluster in
- + root directory */
- + __le16 info_sector; /* filesystem info sector */
- + __le16 backup_boot; /* backup boot sector */
- + __le16 reserved2[6]; /* Unused */
- + /* Extended BPB Fields for FAT32 */
- + __u8 drive_number; /* Physical drive number */
- + __u8 state; /* undocumented, but used
- + for mount state. */
- + __u8 signature; /* extended boot signature */
- + __u8 vol_id[4]; /* volume ID */
- + __u8 vol_label[11]; /* volume label */
- + __u8 fs_type[8]; /* file system type */
- + /* other fiealds are not added here */
- + } fat32;
- + };
- +};
- +
- +struct fat_boot_fsinfo {
- + __le32 signature1; /* 0x41615252L */
- + __le32 reserved1[120]; /* Nothing as far as I can tell */
- + __le32 signature2; /* 0x61417272L */
- + __le32 free_clusters; /* Free cluster count. -1 if unknown */
- + __le32 next_cluster; /* Most recently allocated cluster */
- + __le32 reserved2[4];
- +};
- +
- +struct msdos_dir_entry {
- + __u8 name[MSDOS_NAME];/* name and extension */
- + __u8 attr; /* attribute bits */
- + __u8 lcase; /* Case for base and extension */
- + __u8 ctime_cs; /* Creation time, centiseconds (0-199) */
- + __le16 ctime; /* Creation time */
- + __le16 cdate; /* Creation date */
- + __le16 adate; /* Last access date */
- + __le16 starthi; /* High 16 bits of cluster in FAT32 */
- + __le16 time,date,start;/* time, date and first cluster */
- + __le32 size; /* file size (in bytes) */
- +};
- +
- +/* Up to 13 characters of the name */
- +struct msdos_dir_slot {
- + __u8 id; /* sequence number for slot */
- + __u8 name0_4[10]; /* first 5 characters in name */
- + __u8 attr; /* attribute byte */
- + __u8 reserved; /* always 0 */
- + __u8 alias_checksum; /* checksum for 8.3 alias */
- + __u8 name5_10[12]; /* 6 more characters in name */
- + __le16 start; /* starting cluster number, 0 in long slots */
- + __u8 name11_12[4]; /* last 2 characters in name */
- +};
- +
- +#endif /* _LINUX_MSDOS_FS_H */
- diff --git a/src/mkfs.fat.c b/src/mkfs.fat.c
- index e6f9390..ebdfdb5 100644
- --- a/src/mkfs.fat.c
- +++ b/src/mkfs.fat.c
- @@ -47,12 +47,6 @@
- #include "version.h"
-
- #include <fcntl.h>
- -#include <linux/hdreg.h>
- -#include <sys/mount.h>
- -#include <linux/fs.h>
- -#include <linux/fd.h>
- -#include <endian.h>
- -#include <mntent.h>
- #include <signal.h>
- #include <string.h>
- #include <stdio.h>
- @@ -60,15 +54,23 @@
- #include <sys/ioctl.h>
- #include <sys/stat.h>
- #include <sys/time.h>
- -#include <sys/types.h>
- #include <unistd.h>
- #include <time.h>
- #include <errno.h>
- #include <ctype.h>
- #include <stdint.h>
- -#include <endian.h>
-
- -#include <asm/types.h>
- +#if defined(__linux__)
- + #include <mntent.h>
- +#elif defined(__osx__)
- + #include <fstab.h>
- + #include <sys/mount.h>
- +#endif
- +
- +#include "common.h"
- +#include "linux/fs.h"
- +#include "linux/fd.h"
- +#include "linux/hdreg.h"
-
- /* In earlier versions, an own llseek() was used, but glibc lseek() is
- * sufficient (or even better :) for 64 bit offsets in the meantime */
- @@ -524,6 +526,7 @@ static uint64_t count_blocks(char *filename, int *remainder)
-
- static void check_mount(char *device_name)
- {
- +#if defined(__linux__)
- FILE *f;
- struct mntent *mnt;
-
- @@ -533,6 +536,17 @@ static void check_mount(char *device_name)
- if (strcmp(device_name, mnt->mnt_fsname) == 0)
- die("%s contains a mounted filesystem.");
- endmntent(f);
- +#elif defined(__osx__)
- + struct statfs* mounts;
- + int num_mounts = getmntinfo(&mounts, MNT_WAIT);
- + if (num_mounts < 0)
- + return;
- + for ( int i = 0; i < num_mounts; i++ )
- + {
- + if (strcmp(device_name, mounts[i].f_mntfromname) == 0)
- + die("%s contains a mounted filesystem.");
- + }
- +#endif
- }
-
- /* Establish the geometry and media parameters for the device */
- --
- 1.9.1
|