/[gxemul]/upstream/0.3.1/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.3.1/include/diskimage.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Mon Oct 8 16:17:52 2007 UTC (16 years, 8 months ago) by dpavlin
File MIME type: text/plain
File size: 4546 byte(s)
0.3.1
1 dpavlin 2 #ifndef DISKIMAGE_H
2     #define DISKIMAGE_H
3    
4     /*
5     * Copyright (C) 2003-2005 Anders Gavare. All rights reserved.
6     *
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     * $Id: diskimage.h,v 1.25 2005/04/04 21:29:30 debug Exp $
32     *
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    
45     struct diskimage {
46     struct diskimage *next;
47     int type; /* DISKIMAGE_SCSI, etc */
48     int id; /* SCSI id */
49    
50     char *fname;
51     FILE *f;
52    
53     off_t total_size;
54     int logical_block_size;
55    
56     int writable;
57     int is_a_cdrom;
58     int is_boot_device;
59    
60     int is_a_tape;
61     uint64_t tape_offset;
62     int tape_filenr;
63     int filemark;
64    
65     int rpms;
66     int ncyls;
67     };
68    
69    
70     /* Transfer command, sent from a SCSI controller device to a disk: */
71     struct scsi_transfer {
72     struct scsi_transfer *next_free;
73    
74     /* These should be set by the SCSI controller before the call: */
75     unsigned char *msg_out;
76     size_t msg_out_len;
77     unsigned char *cmd;
78     size_t cmd_len;
79    
80     /* data_out_len is set by the SCSI disk, if it needs data_out,
81     which is then filled in during a second pass in the controller. */
82     unsigned char *data_out;
83     size_t data_out_len;
84     size_t data_out_offset;
85    
86     /* These should be set by the SCSI (disk) device before returning: */
87     unsigned char *data_in;
88     size_t data_in_len;
89     unsigned char *msg_in;
90     size_t msg_in_len;
91     unsigned char *status;
92     size_t status_len;
93     };
94    
95    
96     struct machine;
97    
98     struct scsi_transfer *scsi_transfer_alloc(void);
99     void scsi_transfer_free(struct scsi_transfer *);
100     void scsi_transfer_allocbuf(size_t *lenp, unsigned char **pp,
101     size_t want_len, int clearflag);
102    
103    
104     int64_t diskimage_getsize(struct machine *machine, int scsi_id);
105     int diskimage_scsicommand(struct cpu *cpu, int scsi_id,
106     struct scsi_transfer *);
107     int diskimage_access(struct machine *machine, int scsi_id, int writeflag,
108     off_t offset, unsigned char *buf, size_t len);
109     int diskimage_exist(struct machine *machine, int scsi_id);
110     int diskimage_bootdev(struct machine *machine);
111     int diskimage_add(struct machine *machine, char *fname);
112     int diskimage_is_a_cdrom(struct machine *machine, int scsi_id);
113     int diskimage_is_a_tape(struct machine *machine, int scsi_id);
114     void diskimage_dump_info(struct machine *machine);
115    
116     /*
117     * SCSI commands:
118     */
119     #define SCSICMD_TEST_UNIT_READY 0x00 /* Mandatory */
120     #define SCSICMD_REQUEST_SENSE 0x03 /* Mandatory */
121     #define SCSICMD_INQUIRY 0x12 /* Mandatory */
122    
123     #define SCSICMD_READ 0x08
124     #define SCSICMD_READ_10 0x28
125     #define SCSICMD_WRITE 0x0a
126     #define SCSICMD_WRITE_10 0x2a
127     #define SCSICMD_MODE_SELECT 0x15
128     #define SCSICMD_MODE_SENSE 0x1a
129     #define SCSICMD_START_STOP_UNIT 0x1b
130    
131     #define SCSICMD_SYNCHRONIZE_CACHE 0x35
132    
133     /* SCSI block device commands: */
134     #define SCSIBLOCKCMD_READ_CAPACITY 0x25
135    
136     /* SCSI CD-ROM commands: */
137     #define SCSICDROM_READ_SUBCHANNEL 0x42
138     #define SCSICDROM_READ_TOC 0x43
139    
140     /* SCSI tape commands: */
141     #define SCSICMD_REWIND 0x01
142     #define SCSICMD_READ_BLOCK_LIMITS 0x05
143     #define SCSICMD_SPACE 0x11
144    
145    
146     #endif /* DISKIMAGE_H */

  ViewVC Help
Powered by ViewVC 1.1.26