summaryrefslogtreecommitdiff
path: root/os/boot/rpcg/dat.h
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 21:39:35 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 21:39:35 +0000
commit74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a (patch)
treec6e220ba61db3a6ea4052e6841296d829654e664 /os/boot/rpcg/dat.h
parent46439007cf417cbd9ac8049bb4122c890097a0fa (diff)
20060303
Diffstat (limited to 'os/boot/rpcg/dat.h')
-rw-r--r--os/boot/rpcg/dat.h217
1 files changed, 217 insertions, 0 deletions
diff --git a/os/boot/rpcg/dat.h b/os/boot/rpcg/dat.h
new file mode 100644
index 00000000..edadc030
--- /dev/null
+++ b/os/boot/rpcg/dat.h
@@ -0,0 +1,217 @@
+typedef struct Alarm Alarm;
+typedef struct Block Block;
+typedef struct IMM IMM;
+typedef struct Queue Queue;
+
+typedef struct List {
+ void *next;
+} List;
+
+typedef struct {
+ int fake;
+ int pri;
+} Lock;
+#define lock(x)
+#define unlock(x)
+
+struct Alarm {
+ List;
+ int busy;
+ long dt;
+ void (*f)(Alarm*);
+ void *arg;
+};
+
+enum {
+ Eaddrlen = 6,
+ ETHERMINTU = 60, /* minimum transmit size */
+ ETHERMAXTU = 1514, /* maximum transmit size */
+ ETHERHDRSIZE = 14, /* size of an ethernet header */
+
+ MaxEther = 4,
+};
+
+typedef struct {
+ uchar d[Eaddrlen];
+ uchar s[Eaddrlen];
+ uchar type[2];
+ uchar data[1500];
+ uchar crc[4];
+} Etherpkt;
+
+extern uchar broadcast[Eaddrlen];
+
+enum {
+ Npart = 20+2, /* 8 sub partitions, disk, and partition */
+ Maxxfer = 16*1024, /* maximum transfer size/cmd */
+};
+
+typedef struct {
+ ulong start;
+ ulong end;
+ char name[NAMELEN+1];
+} Partition;
+
+typedef struct {
+ int online;
+ int npart; /* number of real partitions */
+ Partition p[Npart];
+ ulong offset;
+ Partition *current; /* current partition */
+
+ ulong cap; /* total bytes */
+ int bytes; /* bytes/sector */
+ int sectors; /* sectors/track */
+ int heads; /* heads/cyl */
+ long cyl; /* cylinders/drive */
+
+ char lba; /* true if drive has logical block addressing */
+ char multi; /* non-zero if drive does multiple block xfers */
+} Disc;
+
+enum {
+ ScsiTestunit = 0x00,
+ ScsiExtsens = 0x03,
+ ScsiInquiry = 0x12,
+ ScsiModesense = 0x1a,
+ ScsiStartunit = 0x1B,
+ ScsiStopunit = 0x1B,
+ ScsiGetcap = 0x25,
+ ScsiRead = 0x08,
+ ScsiWrite = 0x0a,
+ ScsiExtread = 0x28,
+ ScsiExtwrite = 0x2a,
+
+ /* data direction */
+ ScsiIn = 1,
+ ScsiOut = 0,
+};
+
+typedef struct Scsibuf Scsibuf;
+typedef struct Scsibuf {
+ void* virt;
+ void* phys;
+ Scsibuf* next;
+};
+
+typedef struct Scsidata {
+ uchar* base;
+ uchar* lim;
+ uchar* ptr;
+} Scsidata;
+
+typedef struct Ureg Ureg;
+
+typedef struct Scsi {
+ ulong pid;
+ ushort target;
+ ushort lun;
+ ushort rflag;
+ ushort status;
+ Scsidata cmd;
+ Scsidata data;
+ Scsibuf* b;
+ uchar* save;
+ uchar cmdblk[16];
+} Scsi;
+
+typedef struct Segdesc {
+ ulong d0;
+ ulong d1;
+} Segdesc;
+
+typedef struct Mach {
+ ulong ticks; /* of the clock since boot time */
+ ulong delayloop;
+ long cpuhz; /* general system clock (cycles) */
+ long clockgen; /* clock generator frequency (cycles) */
+ ulong cpupvr; /* cpu type in processor version register */
+ ulong cputype; /* cpu variant in BCD (eg, 0x823xx) */
+ void* alarm; /* alarms bound to this clock */
+ ulong* bcsr;
+ IMM* iomem;
+} Mach;
+
+/* Mach.cputype */
+#define MPCREV(x) ((x) & 0xFF)
+#define MPCMODEL(x) (((x)>>8) & 0xFFF)
+#define MPCFAMILY(x) (((x)>>24) & 0x0F)
+
+
+extern Mach *m;
+
+#define Q_MAGIC ((((4*21)+0)*21)+7)
+
+typedef struct Exec Exec;
+struct Exec
+{
+ uchar magic[4]; /* magic number */
+ uchar text[4]; /* size of text segment */
+ uchar data[4]; /* size of initialized data */
+ uchar bss[4]; /* size of uninitialized data */
+ uchar syms[4]; /* size of symbol table */
+ uchar entry[4]; /* entry point */
+ uchar spsz[4]; /* size of sp/pc offset table */
+ uchar pcsz[4]; /* size of pc/line number table */
+};
+
+/*
+ * bootline passed by boot program
+ */
+#define BOOTLINE ((char *)0x200000-150)
+
+/*
+ * Where we leave configuration info.
+ */
+#define BOOTARGS ((char*)(0x200000))
+#define BOOTARGSLEN 1024
+#define MAXCONF 32
+
+/*
+ * a parsed plan9.ini line
+ */
+#define ISAOPTLEN 16
+#define NISAOPT 8
+
+typedef struct ISAConf {
+ char type[NAMELEN];
+ ulong port;
+ ulong irq;
+ ulong mem;
+ ulong size;
+ uchar ea[6];
+
+ int nopt;
+ char opt[NISAOPT][ISAOPTLEN];
+} ISAConf;
+
+typedef struct {
+ int size;
+ ulong addr;
+} Map;
+
+typedef struct {
+ char* name;
+ Map* map;
+ Map* mapend;
+
+ Lock;
+} RMap;
+
+typedef struct PCIcfg PCIcfg;
+
+extern uchar* vgamem;
+
+struct Block {
+ uchar *rp;
+ uchar *wp;
+ uchar *lim;
+ uchar *data;
+ Block* next;
+ ulong magic;
+};
+#define BLEN(b) ((b)->wp-(b)->rp)
+
+typedef struct QLock {
+ int dummy;
+} QLock;