Revision f2818f22

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