Revision f2818f22 hw/esp.c
b/hw/esp.c | ||
---|---|---|
203 | 203 |
return dmalen; |
204 | 204 |
} |
205 | 205 |
|
206 |
static void do_cmd(ESPState *s, uint8_t *buf)
|
|
206 |
static void do_busid_cmd(ESPState *s, uint8_t *buf, uint8_t busid)
|
|
207 | 207 |
{ |
208 | 208 |
int32_t datalen; |
209 | 209 |
int lun; |
210 | 210 |
|
211 |
DPRINTF("do_cmd: busid 0x%x\n", buf[0]);
|
|
212 |
lun = buf[0] & 7;
|
|
213 |
datalen = s->current_dev->send_command(s->current_dev, 0, &buf[1], lun);
|
|
211 |
DPRINTF("do_busid_cmd: busid 0x%x\n", busid);
|
|
212 |
lun = busid & 7;
|
|
213 |
datalen = s->current_dev->send_command(s->current_dev, 0, buf, lun);
|
|
214 | 214 |
s->ti_size = datalen; |
215 | 215 |
if (datalen != 0) { |
216 | 216 |
s->rregs[ESP_RSTAT] = STAT_TC; |
... | ... | |
229 | 229 |
esp_raise_irq(s); |
230 | 230 |
} |
231 | 231 |
|
232 |
static void do_cmd(ESPState *s, uint8_t *buf) |
|
233 |
{ |
|
234 |
uint8_t busid = buf[0]; |
|
235 |
|
|
236 |
do_busid_cmd(s, &buf[1], busid); |
|
237 |
} |
|
238 |
|
|
232 | 239 |
static void handle_satn(ESPState *s) |
233 | 240 |
{ |
234 | 241 |
uint8_t buf[32]; |
... | ... | |
239 | 246 |
do_cmd(s, buf); |
240 | 247 |
} |
241 | 248 |
|
249 |
static void handle_s_without_atn(ESPState *s) |
|
250 |
{ |
|
251 |
uint8_t buf[32]; |
|
252 |
int len; |
|
253 |
|
|
254 |
len = get_cmd(s, buf); |
|
255 |
if (len) { |
|
256 |
do_busid_cmd(s, buf, 0); |
|
257 |
} |
|
258 |
} |
|
259 |
|
|
242 | 260 |
static void handle_satn_stop(ESPState *s) |
243 | 261 |
{ |
244 | 262 |
s->cmdlen = get_cmd(s, s->cmdbuf); |
... | ... | |
544 | 562 |
break; |
545 | 563 |
case CMD_SEL: |
546 | 564 |
DPRINTF("Select without ATN (%2.2x)\n", val); |
547 |
handle_satn(s); |
|
565 |
handle_s_without_atn(s);
|
|
548 | 566 |
break; |
549 | 567 |
case CMD_SELATN: |
550 | 568 |
DPRINTF("Select with ATN (%2.2x)\n", val); |
Also available in: Unified diff