/[gxemul]/upstream/0.4.4/src/include/diskimage.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /upstream/0.4.4/src/include/diskimage.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 35 - (hide annotations)
Mon Oct 8 16:21:26 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 5202 byte(s)
0.4.4
1 dpavlin 4 #ifndef DISKIMAGE_H
2     #define DISKIMAGE_H
3    
4     /*
5 dpavlin 34 * Copyright (C) 2003-2007 Anders Gavare. All rights reserved.
6 dpavlin 4 *
7     * Redistribution and use in source and binary forms, with or without
8     * modification, are permitted provided that the following conditions are met:
9     *
10     * 1. Redistributions of source code must retain the above copyright
11     * notice, this list of conditions and the following disclaimer.
12     * 2. Redistributions in binary form must reproduce the above copyright
13     * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the distribution.
15     * 3. The name of the author may not be used to endorse or promote products
16     * derived from this software without specific prior written permission.
17     *
18     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21     * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28     * SUCH DAMAGE.
29     *
30     *
31 dpavlin 34 * $Id: diskimage.h,v 1.34 2006/12/30 13:31:00 debug Exp $
32 dpavlin 4 *
33     * Generic disk image functions. (See diskimage.c for more info.)
34     */
35    
36     #include <stdio.h>
37     #include <sys/types.h>
38    
39     #include "misc.h"
40    
41     /* Diskimage types: */
42     #define DISKIMAGE_SCSI 1
43     #define DISKIMAGE_IDE 2
44     #define DISKIMAGE_FLOPPY 3
45    
46 dpavlin 6 #define DISKIMAGE_TYPES { "(NONE)", "SCSI", "IDE", "FLOPPY" }
47    
48 dpavlin 4 struct diskimage {
49     struct diskimage *next;
50     int type; /* DISKIMAGE_SCSI, etc */
51     int id; /* SCSI id */
52    
53     char *fname;
54     FILE *f;
55    
56 dpavlin 6 int chs_override;
57     int cylinders;
58     int heads;
59     int sectors_per_track;
60    
61 dpavlin 4 off_t total_size;
62 dpavlin 34 int64_t override_base_offset;
63 dpavlin 4 int logical_block_size;
64    
65     int writable;
66     int is_a_cdrom;
67     int is_boot_device;
68    
69     int is_a_tape;
70     uint64_t tape_offset;
71     int tape_filenr;
72     int filemark;
73    
74     int rpms;
75     int ncyls;
76     };
77    
78    
79     /* Transfer command, sent from a SCSI controller device to a disk: */
80     struct scsi_transfer {
81     struct scsi_transfer *next_free;
82    
83     /* These should be set by the SCSI controller before the call: */
84     unsigned char *msg_out;
85     size_t msg_out_len;
86     unsigned char *cmd;
87     size_t cmd_len;
88    
89     /* data_out_len is set by the SCSI disk, if it needs data_out,
90     which is then filled in during a second pass in the controller. */
91     unsigned char *data_out;
92     size_t data_out_len;
93     size_t data_out_offset;
94    
95     /* These should be set by the SCSI (disk) device before returning: */
96     unsigned char *data_in;
97     size_t data_in_len;
98     unsigned char *msg_in;
99     size_t msg_in_len;
100     unsigned char *status;
101     size_t status_len;
102     };
103    
104    
105     struct machine;
106    
107     struct scsi_transfer *scsi_transfer_alloc(void);
108     void scsi_transfer_free(struct scsi_transfer *);
109     void scsi_transfer_allocbuf(size_t *lenp, unsigned char **pp,
110     size_t want_len, int clearflag);
111    
112    
113 dpavlin 6 int64_t diskimage_getsize(struct machine *machine, int id, int type);
114 dpavlin 34 int64_t diskimage_get_baseoffset(struct machine *machine, int id, int type);
115 dpavlin 6 void diskimage_getchs(struct machine *machine, int id, int type,
116     int *c, int *h, int *s);
117     int diskimage_scsicommand(struct cpu *cpu, int id, int type,
118 dpavlin 4 struct scsi_transfer *);
119 dpavlin 6 int diskimage_access(struct machine *machine, int id, int type, int writeflag,
120 dpavlin 4 off_t offset, unsigned char *buf, size_t len);
121 dpavlin 14 int diskimage_exist(struct machine *machine, int id, int type);
122 dpavlin 6 int diskimage_bootdev(struct machine *machine, int *typep);
123 dpavlin 4 int diskimage_add(struct machine *machine, char *fname);
124 dpavlin 14 int diskimage_getname(struct machine *machine, int id, int type,
125     char *buf, size_t bufsize);
126 dpavlin 6 int diskimage_is_a_cdrom(struct machine *machine, int id, int type);
127     int diskimage_is_a_tape(struct machine *machine, int id, int type);
128 dpavlin 4 void diskimage_dump_info(struct machine *machine);
129    
130     /*
131     * SCSI commands:
132     */
133     #define SCSICMD_TEST_UNIT_READY 0x00 /* Mandatory */
134     #define SCSICMD_REQUEST_SENSE 0x03 /* Mandatory */
135     #define SCSICMD_INQUIRY 0x12 /* Mandatory */
136    
137     #define SCSICMD_READ 0x08
138     #define SCSICMD_READ_10 0x28
139     #define SCSICMD_WRITE 0x0a
140     #define SCSICMD_WRITE_10 0x2a
141     #define SCSICMD_MODE_SELECT 0x15
142     #define SCSICMD_MODE_SENSE 0x1a
143     #define SCSICMD_START_STOP_UNIT 0x1b
144 dpavlin 20 #define SCSICMD_PREVENT_ALLOW_REMOVE 0x1e
145     #define SCSICMD_MODE_SENSE10 0x5a
146 dpavlin 4
147     #define SCSICMD_SYNCHRONIZE_CACHE 0x35
148    
149     /* SCSI block device commands: */
150     #define SCSIBLOCKCMD_READ_CAPACITY 0x25
151    
152     /* SCSI CD-ROM commands: */
153     #define SCSICDROM_READ_SUBCHANNEL 0x42
154     #define SCSICDROM_READ_TOC 0x43
155 dpavlin 32 #define SCSICDROM_READ_DISCINFO 0x51
156     #define SCSICDROM_READ_TRACKINFO 0x52
157 dpavlin 4
158     /* SCSI tape commands: */
159     #define SCSICMD_REWIND 0x01
160     #define SCSICMD_READ_BLOCK_LIMITS 0x05
161     #define SCSICMD_SPACE 0x11
162    
163    
164     #endif /* DISKIMAGE_H */

  ViewVC Help
Powered by ViewVC 1.1.26