Statistics
| Branch: | Revision:

root / hw / esp.h @ 71193433

History | View | Annotate | Download (3.1 kB)

1 1e37607b Gerd Hoffmann
#ifndef QEMU_HW_ESP_H
2 1e37607b Gerd Hoffmann
#define QEMU_HW_ESP_H
3 1e37607b Gerd Hoffmann
4 9c7e23fc Hervé Poussineau
#include "scsi.h"
5 9c7e23fc Hervé Poussineau
6 8b17de88 blueswir1
/* esp.c */
7 8b17de88 blueswir1
#define ESP_MAX_DEVS 7
8 ff9868ec Blue Swirl
typedef void (*ESPDMAMemoryReadWriteFunc)(void *opaque, uint8_t *buf, int len);
9 c227f099 Anthony Liguori
void esp_init(target_phys_addr_t espaddr, int it_shift,
10 ff9868ec Blue Swirl
              ESPDMAMemoryReadWriteFunc dma_memory_read,
11 ff9868ec Blue Swirl
              ESPDMAMemoryReadWriteFunc dma_memory_write,
12 73d74342 Blue Swirl
              void *dma_opaque, qemu_irq irq, qemu_irq *reset,
13 73d74342 Blue Swirl
              qemu_irq *dma_enable);
14 1e37607b Gerd Hoffmann
15 9c7e23fc Hervé Poussineau
#define ESP_REGS 16
16 9c7e23fc Hervé Poussineau
#define TI_BUFSZ 16
17 9c7e23fc Hervé Poussineau
18 9c7e23fc Hervé Poussineau
typedef struct ESPState ESPState;
19 9c7e23fc Hervé Poussineau
20 9c7e23fc Hervé Poussineau
struct ESPState {
21 9c7e23fc Hervé Poussineau
    uint8_t rregs[ESP_REGS];
22 9c7e23fc Hervé Poussineau
    uint8_t wregs[ESP_REGS];
23 9c7e23fc Hervé Poussineau
    qemu_irq irq;
24 9c7e23fc Hervé Poussineau
    uint8_t chip_id;
25 9c7e23fc Hervé Poussineau
    int32_t ti_size;
26 9c7e23fc Hervé Poussineau
    uint32_t ti_rptr, ti_wptr;
27 9c7e23fc Hervé Poussineau
    uint32_t status;
28 9c7e23fc Hervé Poussineau
    uint32_t dma;
29 9c7e23fc Hervé Poussineau
    uint8_t ti_buf[TI_BUFSZ];
30 9c7e23fc Hervé Poussineau
    SCSIBus bus;
31 9c7e23fc Hervé Poussineau
    SCSIDevice *current_dev;
32 9c7e23fc Hervé Poussineau
    SCSIRequest *current_req;
33 9c7e23fc Hervé Poussineau
    uint8_t cmdbuf[TI_BUFSZ];
34 9c7e23fc Hervé Poussineau
    uint32_t cmdlen;
35 9c7e23fc Hervé Poussineau
    uint32_t do_cmd;
36 9c7e23fc Hervé Poussineau
37 9c7e23fc Hervé Poussineau
    /* The amount of data left in the current DMA transfer.  */
38 9c7e23fc Hervé Poussineau
    uint32_t dma_left;
39 9c7e23fc Hervé Poussineau
    /* The size of the current DMA transfer.  Zero if no transfer is in
40 9c7e23fc Hervé Poussineau
       progress.  */
41 9c7e23fc Hervé Poussineau
    uint32_t dma_counter;
42 9c7e23fc Hervé Poussineau
    int dma_enabled;
43 9c7e23fc Hervé Poussineau
44 9c7e23fc Hervé Poussineau
    uint32_t async_len;
45 9c7e23fc Hervé Poussineau
    uint8_t *async_buf;
46 9c7e23fc Hervé Poussineau
47 9c7e23fc Hervé Poussineau
    ESPDMAMemoryReadWriteFunc dma_memory_read;
48 9c7e23fc Hervé Poussineau
    ESPDMAMemoryReadWriteFunc dma_memory_write;
49 9c7e23fc Hervé Poussineau
    void *dma_opaque;
50 9c7e23fc Hervé Poussineau
    void (*dma_cb)(ESPState *s);
51 9c7e23fc Hervé Poussineau
};
52 9c7e23fc Hervé Poussineau
53 9c7e23fc Hervé Poussineau
#define ESP_TCLO   0x0
54 9c7e23fc Hervé Poussineau
#define ESP_TCMID  0x1
55 9c7e23fc Hervé Poussineau
#define ESP_FIFO   0x2
56 9c7e23fc Hervé Poussineau
#define ESP_CMD    0x3
57 9c7e23fc Hervé Poussineau
#define ESP_RSTAT  0x4
58 9c7e23fc Hervé Poussineau
#define ESP_WBUSID 0x4
59 9c7e23fc Hervé Poussineau
#define ESP_RINTR  0x5
60 9c7e23fc Hervé Poussineau
#define ESP_WSEL   0x5
61 9c7e23fc Hervé Poussineau
#define ESP_RSEQ   0x6
62 9c7e23fc Hervé Poussineau
#define ESP_WSYNTP 0x6
63 9c7e23fc Hervé Poussineau
#define ESP_RFLAGS 0x7
64 9c7e23fc Hervé Poussineau
#define ESP_WSYNO  0x7
65 9c7e23fc Hervé Poussineau
#define ESP_CFG1   0x8
66 9c7e23fc Hervé Poussineau
#define ESP_RRES1  0x9
67 9c7e23fc Hervé Poussineau
#define ESP_WCCF   0x9
68 9c7e23fc Hervé Poussineau
#define ESP_RRES2  0xa
69 9c7e23fc Hervé Poussineau
#define ESP_WTEST  0xa
70 9c7e23fc Hervé Poussineau
#define ESP_CFG2   0xb
71 9c7e23fc Hervé Poussineau
#define ESP_CFG3   0xc
72 9c7e23fc Hervé Poussineau
#define ESP_RES3   0xd
73 9c7e23fc Hervé Poussineau
#define ESP_TCHI   0xe
74 9c7e23fc Hervé Poussineau
#define ESP_RES4   0xf
75 9c7e23fc Hervé Poussineau
76 9c7e23fc Hervé Poussineau
#define CMD_DMA 0x80
77 9c7e23fc Hervé Poussineau
#define CMD_CMD 0x7f
78 9c7e23fc Hervé Poussineau
79 9c7e23fc Hervé Poussineau
#define CMD_NOP      0x00
80 9c7e23fc Hervé Poussineau
#define CMD_FLUSH    0x01
81 9c7e23fc Hervé Poussineau
#define CMD_RESET    0x02
82 9c7e23fc Hervé Poussineau
#define CMD_BUSRESET 0x03
83 9c7e23fc Hervé Poussineau
#define CMD_TI       0x10
84 9c7e23fc Hervé Poussineau
#define CMD_ICCS     0x11
85 9c7e23fc Hervé Poussineau
#define CMD_MSGACC   0x12
86 9c7e23fc Hervé Poussineau
#define CMD_PAD      0x18
87 9c7e23fc Hervé Poussineau
#define CMD_SATN     0x1a
88 9c7e23fc Hervé Poussineau
#define CMD_RSTATN   0x1b
89 9c7e23fc Hervé Poussineau
#define CMD_SEL      0x41
90 9c7e23fc Hervé Poussineau
#define CMD_SELATN   0x42
91 9c7e23fc Hervé Poussineau
#define CMD_SELATNS  0x43
92 9c7e23fc Hervé Poussineau
#define CMD_ENSEL    0x44
93 9c7e23fc Hervé Poussineau
#define CMD_DISSEL   0x45
94 9c7e23fc Hervé Poussineau
95 9c7e23fc Hervé Poussineau
#define STAT_DO 0x00
96 9c7e23fc Hervé Poussineau
#define STAT_DI 0x01
97 9c7e23fc Hervé Poussineau
#define STAT_CD 0x02
98 9c7e23fc Hervé Poussineau
#define STAT_ST 0x03
99 9c7e23fc Hervé Poussineau
#define STAT_MO 0x06
100 9c7e23fc Hervé Poussineau
#define STAT_MI 0x07
101 9c7e23fc Hervé Poussineau
#define STAT_PIO_MASK 0x06
102 9c7e23fc Hervé Poussineau
103 9c7e23fc Hervé Poussineau
#define STAT_TC 0x10
104 9c7e23fc Hervé Poussineau
#define STAT_PE 0x20
105 9c7e23fc Hervé Poussineau
#define STAT_GE 0x40
106 9c7e23fc Hervé Poussineau
#define STAT_INT 0x80
107 9c7e23fc Hervé Poussineau
108 9c7e23fc Hervé Poussineau
#define BUSID_DID 0x07
109 9c7e23fc Hervé Poussineau
110 9c7e23fc Hervé Poussineau
#define INTR_FC 0x08
111 9c7e23fc Hervé Poussineau
#define INTR_BS 0x10
112 9c7e23fc Hervé Poussineau
#define INTR_DC 0x20
113 9c7e23fc Hervé Poussineau
#define INTR_RST 0x80
114 9c7e23fc Hervé Poussineau
115 9c7e23fc Hervé Poussineau
#define SEQ_0 0x0
116 9c7e23fc Hervé Poussineau
#define SEQ_CD 0x4
117 9c7e23fc Hervé Poussineau
118 9c7e23fc Hervé Poussineau
#define CFG1_RESREPT 0x40
119 9c7e23fc Hervé Poussineau
120 9c7e23fc Hervé Poussineau
#define TCHI_FAS100A 0x4
121 9c7e23fc Hervé Poussineau
#define TCHI_AM53C974 0x12
122 9c7e23fc Hervé Poussineau
123 9c7e23fc Hervé Poussineau
void esp_dma_enable(ESPState *s, int irq, int level);
124 9c7e23fc Hervé Poussineau
void esp_request_cancelled(SCSIRequest *req);
125 9c7e23fc Hervé Poussineau
void esp_command_complete(SCSIRequest *req, uint32_t status, size_t resid);
126 9c7e23fc Hervé Poussineau
void esp_transfer_data(SCSIRequest *req, uint32_t len);
127 9c7e23fc Hervé Poussineau
void esp_hard_reset(ESPState *s);
128 9c7e23fc Hervé Poussineau
uint64_t esp_reg_read(ESPState *s, uint32_t saddr);
129 9c7e23fc Hervé Poussineau
void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val);
130 9c7e23fc Hervé Poussineau
extern const VMStateDescription vmstate_esp;
131 9c7e23fc Hervé Poussineau
132 1e37607b Gerd Hoffmann
#endif