Revision 5493e33f hw/ssi-sd.c

b/hw/ssi-sd.c
1 1
/*
2 2
 * SSI to SD card adapter.
3 3
 *
4
 * Copyright (c) 2007 CodeSourcery.
4
 * Copyright (c) 2007-2009 CodeSourcery.
5 5
 * Written by Paul Brook
6 6
 *
7
 * This code is licenced under the GPL.
7
 * This code is licenced under the GNU GPL v2.
8 8
 */
9 9

  
10
#include "hw.h"
10
#include "ssi.h"
11 11
#include "sd.h"
12
#include "sysemu.h"
12 13

  
13 14
//#define DEBUG_SSI_SD 1
14 15

  
......
32 33
} ssi_sd_mode;
33 34

  
34 35
typedef struct {
36
    SSISlave ssidev;
35 37
    ssi_sd_mode mode;
36 38
    int cmd;
37 39
    uint8_t cmdarg[4];
......
59 61
#define SSI_SDR_ADDRESS_ERROR   0x2000
60 62
#define SSI_SDR_PARAMETER_ERROR 0x4000
61 63

  
62
int ssi_sd_xfer(void *opaque, int val)
64
static uint32_t ssi_sd_transfer(SSISlave *dev, uint32_t val)
63 65
{
64
    ssi_sd_state *s = (ssi_sd_state *)opaque;
66
    ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, dev);
65 67

  
66 68
    /* Special case: allow CMD12 (STOP TRANSMISSION) while reading data.  */
67 69
    if (s->mode == SSI_SD_DATA_READ && val == 0x4d) {
......
227 229
    return 0;
228 230
}
229 231

  
230
void *ssi_sd_init(BlockDriverState *bs)
232
static void ssi_sd_init(SSISlave *dev)
231 233
{
232
    ssi_sd_state *s;
234
    ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, dev);
235
    BlockDriverState *bs;
233 236

  
234
    s = (ssi_sd_state *)qemu_mallocz(sizeof(ssi_sd_state));
235 237
    s->mode = SSI_SD_CMD;
238
    bs = qdev_init_bdrv(&dev->qdev, IF_SD);
236 239
    s->sd = sd_init(bs, 1);
237 240
    register_savevm("ssi_sd", -1, 1, ssi_sd_save, ssi_sd_load, s);
238
    return s;
239 241
}
242

  
243
static SSISlaveInfo ssi_sd_info = {
244
    .init = ssi_sd_init,
245
    .transfer = ssi_sd_transfer
246
};
247

  
248
static void ssi_sd_register_devices(void)
249
{
250
    ssi_register_slave("ssi-sd", sizeof(ssi_sd_state), &ssi_sd_info);
251
}
252

  
253
device_init(ssi_sd_register_devices)

Also available in: Unified diff